use std::fmt::Debug;
use std::path::Path;
use crate::error::Result;
use crate::ChildEntity;
use crate::{Storable, XvcStore};
#[derive(Debug, Clone)]
pub struct RMNStore<T, U>
where
T: Storable,
U: Storable,
{
pub left: XvcStore<T>,
pub right: XvcStore<U>,
pub left_to_right: XvcStore<ChildEntity<T, U>>,
pub right_to_left: XvcStore<ChildEntity<U, T>>,
}
impl<T, U> RMNStore<T, U>
where
T: Storable,
U: Storable,
{
pub fn load_rmnstore(store_root: &Path) -> Result<RMNStore<T, U>> {
let left = XvcStore::<T>::load_store(store_root)?;
let right = XvcStore::<U>::load_store(store_root)?;
let left_to_right = XvcStore::<ChildEntity<T, U>>::load_store(store_root)?;
let right_to_left = XvcStore::<ChildEntity<U, T>>::load_store(store_root)?;
Ok(RMNStore {
left,
right,
left_to_right,
right_to_left,
})
}
pub fn save_rmnstore(store: &Self, store_root: &Path) -> Result<()> {
store.left.save(store_root)?;
store.right.save(store_root)?;
store.left_to_right.save(store_root)?;
store.right_to_left.save(store_root)
}
}