structdb/
serialization.rs

1use crate::errors::{Error, Result};
2use byte_counter::counter::ByteCounter;
3use serde::{Deserialize, Serialize};
4
5pub trait BinCode {
6    fn to_bytes(&self) -> Result<Vec<u8>>
7    where
8        Self: Serialize,
9    {
10        match bincode::serialize(&self) {
11            Ok(result) => Ok(result),
12            Err(err) => Err(Error::SerializationFailed(err.to_string())),
13        }
14    }
15
16    fn from_bytes<'de>(encoded: &'de [u8]) -> Result<Self>
17    where
18        Self: Deserialize<'de>,
19    {
20        match bincode::deserialize(encoded) {
21            Ok(result) => Ok(result),
22            Err(err) => Err(Error::DeserializationFailed(err.to_string())),
23        }
24    }
25}
26
27impl BinCode for &str {}
28
29impl BinCode for String {}
30
31impl BinCode for ByteCounter {}
32
33#[cfg(test)]
34mod tests {
35    use crate::serialization::BinCode;
36
37    #[test]
38    fn test_string() {
39        let value = "test".to_string();
40        let encoded = value.to_bytes().unwrap();
41        let decoded = String::from_bytes(&encoded).unwrap();
42
43        //println!("{:?} == {:?}", value, decoded);
44        assert_eq!(value, decoded);
45    }
46}