connection_utils/codecs/generic_codec/
decoder.rs1use 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}