connection_utils/codecs/generic_codec/
decoder.rs

1use std::io::Error;
2
3use bytes::BytesMut;
4use serde::{Serialize, de::DeserializeOwned};
5use tokio_util::codec::Decoder;
6
7use super::GenericCodec;
8
9impl<T: Serialize + DeserializeOwned> Decoder for GenericCodec<T> {
10    type Item = T;
11    type Error = Error;
12
13    fn decode(
14        &mut self,
15        buf: &mut BytesMut,
16    ) -> Result<Option<Self::Item>, Self::Error> {
17        let maybe_bytes = Decoder::decode(
18            &mut self.length_delimited_codec, 
19            buf,
20        )?;
21
22        let bytes = match maybe_bytes {
23            None => return Ok(None),
24            Some(b) => b,
25        };
26
27        let message: T = serde_json::from_slice::<Self::Item>(&bytes[..])
28            .expect("Cannot deserialize bytes to message.");
29
30        return Ok(Some(message));
31    } 
32}