weavatrix_memory/
codec.rs1use crate::Result;
2
3#[cfg(feature = "compression")]
4mod compression;
5#[cfg(feature = "encryption")]
6mod encryption;
7
8#[cfg(feature = "compression")]
9pub use compression::Lz4Codec;
10#[cfg(feature = "encryption")]
11pub use encryption::{
12 EncryptionKey, EncryptionKeys, NonceSource, OsNonce, StaticKey, XChaCha20Codec,
13};
14
15pub trait Codec<T> {
17 fn encode(&self, value: &T) -> Result<Vec<u8>>;
23
24 fn decode(&self, bytes: &[u8]) -> Result<T>;
30}
31
32#[cfg(feature = "json")]
33#[derive(Debug, Clone, Copy, Default)]
34pub struct JsonCodec;
35
36#[cfg(feature = "json")]
37impl<T> Codec<T> for JsonCodec
38where
39 T: serde::Serialize + serde::de::DeserializeOwned,
40{
41 fn encode(&self, value: &T) -> Result<Vec<u8>> {
42 serde_json::to_vec(value).map_err(|error| crate::MemoryError::Codec {
43 message: error.to_string(),
44 })
45 }
46
47 fn decode(&self, bytes: &[u8]) -> Result<T> {
48 serde_json::from_slice(bytes).map_err(|error| crate::MemoryError::Codec {
49 message: error.to_string(),
50 })
51 }
52}