pub mod branch;
pub mod primitive;
pub mod missing;
pub mod error;
pub mod reader_writer;
pub mod prelude;
#[cfg(test)]
mod tests;
use crate::prelude::*;
const PREAMBLE: [u8; 7] = [84, 82, 69, 69, 66, 85, 70];
pub fn write<T: Writable>(value: &T) -> Vec<u8>
{
let mut writer = T::Writer::new();
writer.write(value);
let mut bytes = Vec::new();
bytes.extend_from_slice(&PREAMBLE);
writer.flush(&BranchId { name: "", parent: 0 }, &mut bytes);
bytes
}
pub fn read<T: Readable>(bytes: &[u8]) -> Result<T, Error> {
let mut offset = 0;
assert_eq!(&PREAMBLE, &bytes[offset..offset+PREAMBLE.len()], "Not valid file"); offset += PREAMBLE.len();
let mut sticks = Vec::new();
while offset < bytes.len() {
sticks.push(Stick::read(bytes, &mut offset));
}
let branch = BranchId { name: "", parent: 0 };
let mut reader = T::Reader::new(&sticks, &branch);
Ok(reader.read())
}