dochy_diff 0.10.1

Calculates Dochy Diff.
use crate::imp::structs_read::ListItemDiffR;
use dochy_core::structs::{MetaTables, MutItem, ListSabValue, RefSabValue};
use crate::diff_error::DiffError;
use dochy_core::{HashM, HashMt};
use crate::imp::apply::apply_params::apply_params;
use crate::imp::apply::apply_lists::apply_lists;
use crate::imp::apply::apply_refs::apply_refs;

pub(crate) fn new_item_from_diff(diff : ListItemDiffR,
                          meta : &MetaTables) -> Result<MutItem, DiffError>{
    let (params, lists, refs) = diff.deconstruct();
    let mut values : HashM<String, ListSabValue> = HashMt::with_capacity(params.len());
    apply_params(params, meta.items(), &mut values)?;
    apply_lists(lists, meta.items(), &mut values)?;

    let mut ref_hash : HashM<String, RefSabValue> = HashMt::with_capacity(refs.len());
    apply_refs(refs, meta.refs(), &mut ref_hash)?;

    Ok(MutItem::new(values, ref_hash))
}