hermes_protobuf_encoding_components/impls/
protobuf.rs1use 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}