structdb/
serialization.rs1use 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 assert_eq!(value, decoded);
45 }
46}