dochy_fs 0.10.1

A file system which composes chlonological diff files efficiently.
use crate::imp::history::diff_and_cache::diff_value::{DiffValue};
use crate::error::FsResult;
use std::io::{Read, Write};
use dochy_diff::RootDiffR;
use dochy_core::structs::MetaTable;

pub(crate) struct DochyDiff{
    vec : Vec<u8>
}

impl DiffValue for DochyDiff{
    fn read_value<R: Read>(read: &mut R) -> FsResult<Self> {
        DochyDiff::read_value(read)
    }

    fn write_value<W: Write>(&self, write: &mut W) -> FsResult<()> {
        self.write_value(write)
    }
}

impl DochyDiff{
    pub(crate) fn new(vec : Vec<u8>) -> DochyDiff{ DochyDiff{ vec } }
    pub(crate) fn slice(&self) -> &[u8]{ &self.vec }
    pub(crate) fn read_value<R: Read>(read: &mut R) -> FsResult<Self> {
        let mut vec : Vec<u8> = vec![];
        read.read_to_end(&mut vec)?;
        Ok(DochyDiff{ vec })
    }
    pub(crate) fn write_value<W: Write>(&self, write: &mut W) -> FsResult<()> {
        write.write_all(&self.vec)?;
        Ok(())
    }

    pub(crate) fn prepare(self, meta_table : &MetaTable) -> FsResult<RootDiffR>{
        let (kvals, _) = dochy_compaction::decode_from_slice(self.slice())?;
        Ok(dochy_diff::get_root_diff_r(kvals, meta_table)?)
    }
}