hermes_protobuf_encoding_components/impls/
protobuf.rs

1use cgp::core::error::{CanRaiseError, HasErrorType};
2use hermes_encoding_components::traits::decode::Decoder;
3use hermes_encoding_components::traits::encode::Encoder;
4use hermes_encoding_components::traits::types::encoded::HasEncodedType;
5use prost::{DecodeError, Message};
6
7pub struct EncodeAsProtobuf;
8
9impl<Encoding, Strategy, Value> Encoder<Encoding, Strategy, Value> for EncodeAsProtobuf
10where
11    Value: Message,
12    Encoding: HasEncodedType<Encoded = Vec<u8>> + HasErrorType,
13{
14    fn encode(_encoding: &Encoding, value: &Value) -> Result<Vec<u8>, Encoding::Error> {
15        Ok(value.encode_to_vec())
16    }
17}
18
19impl<Encoding, Strategy, Value> Decoder<Encoding, Strategy, Value> for EncodeAsProtobuf
20where
21    Value: Message + Default,
22    Encoding: HasEncodedType<Encoded = Vec<u8>> + CanRaiseError<DecodeError>,
23{
24    fn decode(_encoding: &Encoding, encoded: &Vec<u8>) -> Result<Value, Encoding::Error> {
25        let decoded = Message::decode(encoded.as_ref()).map_err(Encoding::raise_error)?;
26
27        Ok(decoded)
28    }
29}