volans_codec/
lib.rs

1mod json;
2mod protobuf;
3
4pub use json::JsonUviCodec;
5pub use protobuf::ProtobufUviCodec;
6
7pub use asynchronous_codec::*;
8pub use prost;
9
10pub struct CombinedCodec<TEncoder, TDecoder>
11where
12    TEncoder: Encoder,
13    TDecoder: Decoder,
14{
15    encoder: TEncoder,
16    decoder: TDecoder,
17}
18
19impl<TEncoder, TDecoder> Encoder for CombinedCodec<TEncoder, TDecoder>
20where
21    TEncoder: Encoder,
22    TDecoder: Decoder,
23{
24    type Item<'a> = TEncoder::Item<'a>;
25    type Error = TEncoder::Error;
26
27    fn encode(&mut self, item: Self::Item<'_>, dst: &mut BytesMut) -> Result<(), Self::Error> {
28        self.encoder.encode(item, dst)
29    }
30}
31
32impl<TEncoder, TDecoder> Decoder for CombinedCodec<TEncoder, TDecoder>
33where
34    TEncoder: Encoder,
35    TDecoder: Decoder,
36{
37    type Item = TDecoder::Item;
38    type Error = TDecoder::Error;
39
40    fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
41        self.decoder.decode(src)
42    }
43}
44
45impl<TEncoder, TDecoder> Clone for CombinedCodec<TEncoder, TDecoder>
46where
47    TEncoder: Encoder + Clone,
48    TDecoder: Decoder + Clone,
49{
50    fn clone(&self) -> Self {
51        CombinedCodec {
52            encoder: self.encoder.clone(),
53            decoder: self.decoder.clone(),
54        }
55    }
56}
57
58impl<TEncoder, TDecoder> Default for CombinedCodec<TEncoder, TDecoder>
59where
60    TEncoder: Encoder + Default,
61    TDecoder: Decoder + Default,
62{
63    fn default() -> Self {
64        CombinedCodec {
65            encoder: TEncoder::default(),
66            decoder: TDecoder::default(),
67        }
68    }
69}
70
71impl<TEncoder, TDecoder> CombinedCodec<TEncoder, TDecoder>
72where
73    TEncoder: Encoder,
74    TDecoder: Decoder,
75{
76    pub fn new(encoder: TEncoder, decoder: TDecoder) -> Self {
77        CombinedCodec { encoder, decoder }
78    }
79
80    pub fn encoder(&self) -> &TEncoder {
81        &self.encoder
82    }
83
84    pub fn decoder(&self) -> &TDecoder {
85        &self.decoder
86    }
87
88    pub fn encoder_mut(&mut self) -> &mut TEncoder {
89        &mut self.encoder
90    }
91
92    pub fn decoder_mut(&mut self) -> &mut TDecoder {
93        &mut self.decoder
94    }
95}