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