1#[derive(Debug, PartialEq)]
2pub enum SerializationError {
3 ValueOutOfBounds(i32, i32, i32),
5
6 UnexpectedLength(usize, usize),
8
9 MissingLengthByKey(String),
11
12 InvalidData(String),
14}
15
16#[derive(Debug, PartialEq)]
17pub enum DeserializationError {
18 NotEnoughBytes(usize),
20
21 UnexpectedLength(usize, usize),
23
24 UnknownDiscriminant(u8),
26
27 MissingLengthByKey(String),
29
30 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;