tiny_counter/formatter/
mod.rs

1//! Serialization format abstraction.
2//!
3//! Separates serialization format (HOW) from storage backend (WHERE).
4//! Mix formats with any storage: FilePerEvent + JSON, Sqlite + bincode, etc.
5
6use crate::{Result, SingleEventCounter};
7
8/// Trait for serialization formats.
9///
10/// Implement this trait to add custom serialization formats (MessagePack, CBOR, etc.).
11pub trait Formatter: Send + Sync {
12    /// Serialize a SingleEventCounter to bytes.
13    fn serialize(&self, value: &SingleEventCounter) -> Result<Vec<u8>>;
14
15    /// Deserialize bytes to a SingleEventCounter.
16    fn deserialize(&self, bytes: &[u8]) -> Result<SingleEventCounter>;
17
18    /// Recommended file extension for this format.
19    fn extension(&self) -> &'static str;
20}
21
22#[cfg(feature = "serde-bincode")]
23mod bincode;
24
25#[cfg(feature = "serde-json")]
26mod json;
27
28#[cfg(feature = "serde-bincode")]
29pub use self::bincode::BincodeFormat;
30
31#[cfg(feature = "serde-json")]
32pub use json::JsonFormat;