#[derive(Debug, PartialEq)]
pub enum SerializationError {
ValueOutOfBounds(i32, i32, i32),
UnexpectedLength(u64, u64),
MissingLengthByKey(String),
InvalidData(String),
}
#[derive(Debug, PartialEq)]
pub enum DeserializationError {
NotEnoughBytes(u64),
UnexpectedLength(u64, u64),
UnknownDiscriminant(u8),
MissingLengthByKey(String),
InvalidData(String),
}
pub trait BinarySerializer<T: Clone = (), E = SerializationError> {
fn write_bytes(
&self,
stream: &mut BitStreamWriter,
config: Option<&mut SerializerConfig<T>>,
) -> Result<(), E>;
fn to_bytes(
&self,
config: Option<&mut SerializerConfig<T>>,
) -> Result<Vec<u8>, E> {
let mut buffer = Vec::new();
let mut stream = BitStreamWriter::new(&mut buffer);
self.write_bytes(&mut stream, config)?;
Ok(buffer)
}
}
pub trait BinaryDeserializer<T: Clone = (), E = DeserializationError>: Sized {
fn read_bytes(
stream: &mut BitStreamReader,
config: Option<&mut SerializerConfig<T>>,
) -> Result<Self, E>;
fn from_bytes(
bytes: &[u8],
config: Option<&mut SerializerConfig<T>>,
) -> Result<Self, E> {
let mut stream = BitStreamReader::new(bytes);
Self::read_bytes(&mut stream, config)
}
}
mod bitstream;
mod config;
pub mod encoding;
pub mod utils;
pub use binary_codec_derive::{FromBytes, ToBytes};
pub use bitstream::{reader::BitStreamReader, writer::BitStreamWriter, CryptoStream};
pub use config::SerializerConfig;
pub use encoding::zigzag::ZigZag;