use crate::error::Result;
use crate::types::xvcroot::XvcRootInner;
use xvc_ecs::R11Store;
use xvc_ecs::R1NStore;
use xvc_ecs::RMNStore;
use xvc_ecs::Storable;
use xvc_ecs::XvcStore;
impl XvcRootInner {
pub fn load_store<T>(&self) -> Result<XvcStore<T>>
where
T: Storable,
{
Ok(XvcStore::<T>::load_store(self.store_dir())?)
}
pub fn save_store<T>(&self, store: &XvcStore<T>) -> Result<()>
where
T: Storable,
{
Ok(XvcStore::<T>::save_store(store, self.store_dir())?)
}
pub fn with_store<T>(&self, mut f: impl FnMut(&XvcStore<T>) -> Result<()>) -> Result<()>
where
T: Storable,
{
let store = self.load_store::<T>()?;
f(&store)
}
pub fn with_store_mut<T>(&self, mut f: impl FnMut(&mut XvcStore<T>) -> Result<()>) -> Result<()>
where
T: Storable,
{
let mut store = self.load_store::<T>()?;
f(&mut store)?;
self.save_store(&store)
}
pub fn load_r11store<T, U>(&self) -> Result<R11Store<T, U>>
where
T: Storable,
U: Storable,
{
Ok(R11Store::<T, U>::load_r11store(self.store_dir())?)
}
pub fn load_r1nstore<T, U>(&self) -> Result<R1NStore<T, U>>
where
T: Storable,
U: Storable,
{
Ok(R1NStore::<T, U>::load_r1nstore(self.store_dir())?)
}
pub fn load_rmnstore<T, U>(&self) -> Result<RMNStore<T, U>>
where
T: Storable,
U: Storable,
{
Ok(RMNStore::<T, U>::load_rmnstore(self.store_dir())?)
}
pub fn save_r11store<T, U>(&self, store: &R11Store<T, U>) -> Result<()>
where
T: Storable,
U: Storable,
{
Ok(R11Store::<T, U>::save_r11store(store, self.store_dir())?)
}
pub fn save_r1nstore<T, U>(&self, store: &R1NStore<T, U>) -> Result<()>
where
T: Storable,
U: Storable,
{
Ok(R1NStore::<T, U>::save_r1nstore(store, self.store_dir())?)
}
pub fn save_rmnstore<T, U>(&self, store: &RMNStore<T, U>) -> Result<()>
where
T: Storable,
U: Storable,
{
Ok(RMNStore::<T, U>::save_rmnstore(store, self.store_dir())?)
}
pub fn with_r11store<T, U>(
&self,
mut f: impl FnMut(&R11Store<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let store = self.load_r11store::<T, U>()?;
f(&store)
}
pub fn with_r1nstore<T, U>(
&self,
mut f: impl FnMut(&R1NStore<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let store = self.load_r1nstore::<T, U>()?;
f(&store)
}
pub fn with_rmnstore<T, U>(
&self,
mut f: impl FnMut(&RMNStore<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let store = self.load_rmnstore::<T, U>()?;
f(&store)
}
pub fn with_r11store_mut<T, U>(
&self,
f: impl Fn(&mut R11Store<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let mut store = self.load_r11store::<T, U>()?;
f(&mut store)?;
self.save_r11store::<T, U>(&store)
}
pub fn with_r1nstore_mut<T, U>(
&self,
f: impl Fn(&mut R1NStore<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let mut store = self.load_r1nstore::<T, U>()?;
f(&mut store)?;
self.save_r1nstore::<T, U>(&store)
}
pub fn with_rmnstore_mut<T, U>(
&self,
f: impl Fn(&mut RMNStore<T, U>) -> Result<()>,
) -> Result<()>
where
T: Storable,
U: Storable,
{
let mut store = self.load_rmnstore::<T, U>()?;
f(&mut store)?;
self.save_rmnstore::<T, U>(&store)
}
}