xbf_rs 0.1.0

The reference implementation for the XBF format.
Documentation
use std::io::{self, Read, Write};
use xbf_rs::{XbfMetadata, XbfType};

pub struct SerializedStorage {
    _value: XbfType,
    serialized_metadata: Vec<u8>,
    serialized_value: Vec<u8>,
}

impl SerializedStorage {
    pub fn new(value: impl Into<XbfType>) -> Self {
        let value = value.into();

        let mut serialized_metadata = vec![];
        XbfMetadata::from(&value)
            .serialize_base_metadata(&mut serialized_metadata)
            .expect("serialization of metadata to internal buffer failed");

        let mut serialized_value = vec![];
        value
            .serialize_base_type(&mut serialized_value)
            .expect("serialization of value to internal buffer failed");

        Self {
            _value: value,
            serialized_metadata,
            serialized_value,
        }
    }

    pub fn _get_value(&self) -> &XbfType {
        &self._value
    }

    pub fn write_metadata(&self, writer: &mut impl Write) -> io::Result<()> {
        writer.write_all(&self.serialized_metadata)
    }

    pub fn write_value(&self, writer: &mut impl Write) -> io::Result<()> {
        writer.write_all(&self.serialized_value)
    }

    pub fn _from_reader(reader: &mut impl Read) -> io::Result<Self> {
        let metadata = XbfMetadata::deserialize_base_metadata(reader)?;
        let value = XbfType::deserialize_base_type(&metadata, reader)?;

        Ok(Self::new(value))
    }
}