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}