hermes_protobuf_encoding_components/impls/
via_any.rs

1use core::marker::PhantomData;
2
3use cgp::prelude::*;
4use hermes_encoding_components::traits::decode::Decoder;
5use hermes_encoding_components::traits::encode::Encoder;
6use hermes_encoding_components::traits::types::encoded::HasEncodedType;
7
8use crate::impls::any::{DecodeAsAnyProtobuf, EncodeAsAnyProtobuf};
9use crate::impls::from_context::EncodeFromContext;
10
11pub struct EncodeViaAny<InStrategy>(pub PhantomData<InStrategy>);
12
13impl<Encoding, Strategy, InStrategy, Value> Encoder<Encoding, Strategy, Value>
14    for EncodeViaAny<InStrategy>
15where
16    Encoding: HasEncodedType + HasErrorType,
17    EncodeAsAnyProtobuf<InStrategy, EncodeFromContext>: Encoder<Encoding, Strategy, Value>,
18    InStrategy: Async,
19{
20    fn encode(encoding: &Encoding, value: &Value) -> Result<Encoding::Encoded, Encoding::Error> {
21        <EncodeAsAnyProtobuf<InStrategy, EncodeFromContext>>::encode(encoding, value)
22    }
23}
24
25impl<Encoding, Strategy, InStrategy, Value> Decoder<Encoding, Strategy, Value>
26    for EncodeViaAny<InStrategy>
27where
28    Encoding: HasEncodedType + HasErrorType,
29    DecodeAsAnyProtobuf<InStrategy, EncodeFromContext>: Decoder<Encoding, InStrategy, Value>,
30    InStrategy: Async,
31{
32    fn decode(encoding: &Encoding, encoded: &Encoding::Encoded) -> Result<Value, Encoding::Error> {
33        let value =
34            <DecodeAsAnyProtobuf<InStrategy, EncodeFromContext>>::decode(encoding, encoded)?;
35
36        Ok(value)
37    }
38}