Skip to main content

fluxrpc_core/
codec.rs

1pub trait Codec: Clone + Sync + Send + 'static {
2    fn encode<T: serde::Serialize>(&self, value: &T) -> anyhow::Result<Vec<u8>>;
3    fn decode<T: serde::de::DeserializeOwned>(&self, data: &[u8]) -> anyhow::Result<T>;
4}
5
6pub mod json {
7    use crate::codec::Codec;
8    use serde::Serialize;
9    use serde::de::DeserializeOwned;
10
11    #[derive(Clone)]
12    pub struct JsonCodec;
13
14    impl JsonCodec {
15        pub fn new() -> Self {
16            Self {}
17        }
18    }
19
20    impl Codec for JsonCodec {
21        fn encode<T: Serialize>(&self, value: &T) -> anyhow::Result<Vec<u8>> {
22            let json = serde_json::to_vec(value)?;
23            Ok(json)
24        }
25
26        fn decode<T: DeserializeOwned>(&self, data: &[u8]) -> anyhow::Result<T> {
27            let val = serde_json::from_slice(data)?;
28            Ok(val)
29        }
30    }
31}