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