binary_codec/
lib.rs

1#[derive(Debug, PartialEq)]
2pub enum SerializationError {
3    /// Value is out of bounds (value, min, max)
4    ValueOutOfBounds(i32, i32, i32),
5
6    // Unexpected size (expected, actual)
7    UnexpectedLength(usize, usize),
8
9    /// Missing runtime length key
10    MissingLengthByKey(String),
11
12    /// Validation did fail for the data
13    InvalidData(String),
14}
15
16#[derive(Debug, PartialEq)]
17pub enum DeserializationError {
18    /// Not enough bytes (bytes missing)
19    NotEnoughBytes(usize),
20
21    // Unexpected size (expected, actual)
22    UnexpectedLength(usize, usize),
23
24    /// Unknown enum discriminator
25    UnknownDiscriminant(u8),
26
27    /// Missing runtime length key
28    MissingLengthByKey(String),
29
30    /// Validation did fail for the data
31    InvalidData(String),
32}
33
34pub trait BinarySerializer<T: Clone = ()> {
35    fn write_bytes(
36        &self,
37        stream: &mut BitStreamWriter,
38        config: Option<&mut SerializerConfig<T>>,
39    ) -> Result<(), SerializationError>;
40
41    fn to_bytes(
42        &self,
43        config: Option<&mut SerializerConfig<T>>,
44    ) -> Result<Vec<u8>, SerializationError> {
45        let mut buffer = Vec::new();
46        let mut stream = BitStreamWriter::new(&mut buffer);
47        self.write_bytes(&mut stream, config)?;
48        Ok(buffer)
49    }
50}
51
52pub trait BinaryDeserializer<T: Clone = ()>: Sized {
53    fn read_bytes(
54        stream: &mut BitStreamReader,
55        config: Option<&mut SerializerConfig<T>>,
56    ) -> Result<Self, DeserializationError>;
57
58    fn from_bytes(
59        bytes: &[u8],
60        config: Option<&mut SerializerConfig<T>>,
61    ) -> Result<Self, DeserializationError> {
62        let mut stream = BitStreamReader::new(bytes);
63        Self::read_bytes(&mut stream, config)
64    }
65}
66
67mod bitstream;
68mod config;
69pub mod encoding;
70pub mod utils;
71
72pub use binary_codec_derive::{FromBytes, ToBytes};
73pub use bitstream::{reader::BitStreamReader, writer::BitStreamWriter, CryptoStream};
74pub use config::SerializerConfig;
75pub use encoding::zigzag::ZigZag;