weavatrix_memory/
codec.rs1use crate::Result;
2
3pub trait Codec<T> {
5 fn encode(&self, value: &T) -> Result<Vec<u8>>;
11
12 fn decode(&self, bytes: &[u8]) -> Result<T>;
18}
19
20#[cfg(feature = "json")]
21#[derive(Debug, Clone, Copy, Default)]
22pub struct JsonCodec;
23
24#[cfg(feature = "json")]
25impl<T> Codec<T> for JsonCodec
26where
27 T: serde::Serialize + serde::de::DeserializeOwned,
28{
29 fn encode(&self, value: &T) -> Result<Vec<u8>> {
30 serde_json::to_vec(value).map_err(|error| crate::MemoryError::Codec {
31 message: error.to_string(),
32 })
33 }
34
35 fn decode(&self, bytes: &[u8]) -> Result<T> {
36 serde_json::from_slice(bytes).map_err(|error| crate::MemoryError::Codec {
37 message: error.to_string(),
38 })
39 }
40}