mod error;
mod format;
mod mapping;
pub mod packet;
pub use error::{BinaryError, BinaryResult};
pub use format::{canonical, format_document, format_link, format_reference, parse_document};
pub use mapping::{
decode_document, encode_document, encode_document_with_limits, BinaryLinoOptions, LinoDocument,
};
pub use packet::{ArityRange, DecodeLimits, LinksPacket, Reference, Section};
#[derive(Clone, Copy, Debug, Default)]
pub struct BinaryLinoCodec {
pub options: BinaryLinoOptions,
pub limits: DecodeLimits,
}
impl BinaryLinoCodec {
pub fn new() -> Self {
Self::default()
}
pub fn with_options(options: BinaryLinoOptions) -> Self {
Self {
options,
..Self::default()
}
}
pub fn encode(&self, document: &[crate::LiNo<String>]) -> BinaryResult<Vec<u8>> {
encode_document_with_limits(document, self.options, &self.limits)?.to_bytes()
}
pub fn decode(&self, bytes: &[u8]) -> BinaryResult<LinoDocument> {
decode_document(&LinksPacket::from_bytes(bytes, &self.limits)?, &self.limits)
}
}