use std::marker::PhantomData; use serde::Serialize; use serde::de::DeserializeOwned; use swactor::Error; use swactor_transport::Codec; pub(crate) struct JsonCodec(PhantomData); impl Default for JsonCodec { fn default() -> Self { Self(PhantomData) } } impl Codec for JsonCodec where M: Serialize + DeserializeOwned + Clone + Send + Sync + 'static, { fn encode(&self, msg: &M) -> Result, Error> { serde_json::to_vec(msg).map_err(|e| Error::from(format!("encode: {e}"))) } fn decode(&self, bytes: &[u8]) -> Result { serde_json::from_slice(bytes).map_err(|e| Error::from(format!("decode: {e}"))) } }