use bimap::BiHashMap;
use crate::builder::Builder;
use crate::iterator::CodeIterator;
use crate::error::Result;
use crate::ir::CodeType;
pub struct Engine {
pub (crate) custom_spaces: bool,
pub (crate) custom_map: BiHashMap<& 'static [u8], usize>,
pub (crate) lengths: Vec<usize>,
}
impl Engine {
pub fn compress(&self, string: & str) -> Vec<u8> {
let mut res = Vec::new();
for code in CodeIterator::new(string, &self) {
code.serialize_into(& mut res, &self);
}
res
}
pub fn decompress(&self, mut bytes: & [u8]) -> Result<String> {
let mut string = String::new();
while !bytes.is_empty() {
let code = CodeType::deserialize_from(& mut bytes, &self)?;
code.add_to_string(& mut string, &self)?;
}
Ok(string)
}
}
pub fn compress(string: &str) -> Vec<u8> {
Builder::default().engine().compress(string)
}
pub fn decompress(bytes: & [u8]) -> Result<String> {
Builder::default().engine().decompress(bytes)
}