dochy_diff 0.10.1

Calculates Dochy Diff.
use dochy_core::structs::{RustParam, Qv, MetaTable, MetaTables};
use std::collections::BTreeMap;

#[derive(Debug)]
pub(crate) struct RootDiffW<'a>{
    params : BTreeMap<usize, &'a RustParam>,
    lists : BTreeMap<usize, Option<ListDiffW<'a>>>,
    meta_table : &'a MetaTable,
}
impl<'a> RootDiffW<'a>{
    pub(crate) fn new(params : BTreeMap<usize, &'a RustParam>, lists : BTreeMap<usize, Option<ListDiffW<'a>>>, meta_table : &'a MetaTable) -> RootDiffW<'a>{
        RootDiffW { params, lists, meta_table }
    }
    pub fn params(&self) -> &BTreeMap<usize, &'a RustParam>{ &self.params }
    pub fn lists(&self) -> &BTreeMap<usize, Option<ListDiffW<'a>>>{ &self.lists }
    pub fn meta_table(&self) -> &MetaTable{ self.meta_table }
}

#[derive(Debug)]
pub(crate ) struct ListDiffW<'a>{
    items : Vec<(u64, ListItemDiffEnumW<'a>)>,
    next_id : u64,
    meta : &'a MetaTables,
}

impl<'a> ListDiffW<'a>{
    pub(crate) fn new(items : Vec<(u64, ListItemDiffEnumW<'a>)>, meta : &'a MetaTables, next_id : u64) -> ListDiffW<'a>{
        ListDiffW { items, meta, next_id }
    }
    pub fn items(&self) -> &Vec<(u64, ListItemDiffEnumW<'a>)>{ &self.items }
    pub fn meta(&self) -> &MetaTables{ self.meta }
    pub fn next_id(&self) -> u64{ self.next_id }
}
#[derive(Debug)]
pub(crate) enum ListItemDiffEnumW<'a>{
    Delete,
    Create(BS<'a>),
    Modify(ListItemDiffW<'a>),
}
#[derive(Debug)]
pub(crate) struct BS<'a>{
    pub prev_id : Option<u64>,
    pub diff : ListItemDiffW<'a>,
}
#[derive(Debug)]
pub(crate) struct ListItemDiffW<'a>{
    params : BTreeMap<usize, &'a RustParam>,
    refs : BTreeMap<usize, &'a Qv<String>>,
    lists : BTreeMap<usize, Option<ListDiffW<'a>>>,
}

impl<'a> ListItemDiffW<'a>{
    pub fn new(
        params : BTreeMap<usize, &'a RustParam>,
        refs : BTreeMap<usize, &'a Qv<String>>,
        lists : BTreeMap<usize, Option<ListDiffW<'a>>>) -> ListItemDiffW<'a>{

        ListItemDiffW { params, refs, lists }
    }
    pub fn params(&self) -> &BTreeMap<usize, &'a RustParam>{ &self.params }
    pub fn refs(&self) -> &BTreeMap<usize, &'a Qv<String>>{ &self.refs }
    pub fn lists(&self) -> &BTreeMap<usize, Option<ListDiffW<'a>>>{ &self.lists }
}