tiny_counter/formatter/
bincode.rs1use crate::{formatter::Formatter, Result, SingleEventCounter};
2
3#[derive(Debug, Clone, Copy)]
7pub struct BincodeFormat;
8
9impl Formatter for BincodeFormat {
10 fn serialize(&self, value: &SingleEventCounter) -> Result<Vec<u8>> {
11 bincode::serialize(value).map_err(|e| crate::Error::Serialization(e.to_string()))
12 }
13
14 fn deserialize(&self, bytes: &[u8]) -> Result<SingleEventCounter> {
15 bincode::deserialize(bytes).map_err(|e| crate::Error::Serialization(e.to_string()))
16 }
17
18 fn extension(&self) -> &'static str {
19 ".bin"
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26 use crate::{EventCounterConfig, SingleEventCounter};
27 use chrono::Utc;
28
29 #[test]
30 fn test_bincode_roundtrip() {
31 let formatter = BincodeFormat;
32 let now = Utc::now();
33 let config = EventCounterConfig::default();
34 let counter = config.create_counter(now);
35
36 let bytes = formatter.serialize(&counter).unwrap();
37 let decoded: SingleEventCounter = formatter.deserialize(&bytes).unwrap();
38
39 assert_eq!(decoded.intervals().len(), counter.intervals().len());
41 }
42
43 #[test]
44 fn test_bincode_extension() {
45 let formatter = BincodeFormat;
46 assert_eq!(formatter.extension(), ".bin");
47 }
48}