use std::fmt::Debug;
use fn_graph::{DataAccess, DataAccessDyn, DataBorrow, Resources, R, W};
use peace_item_model::ItemId;
pub trait Data<'borrow>: DataAccess + DataAccessDyn + Send {
fn borrow(item_id: &'borrow ItemId, resources: &'borrow Resources) -> Self;
}
impl<'borrow> Data<'borrow> for () {
fn borrow(_item_id: &'borrow ItemId, _resources: &'borrow Resources) -> Self {}
}
impl<'borrow> Data<'borrow> for &'borrow () {
fn borrow(_item_id: &'borrow ItemId, _resources: &'borrow Resources) -> Self {
&()
}
}
impl<'borrow, T> Data<'borrow> for R<'borrow, T>
where
T: Debug + Send + Sync + 'static,
{
fn borrow(_item_id: &'borrow ItemId, resources: &'borrow Resources) -> Self {
<Self as DataBorrow>::borrow(resources)
}
}
impl<'borrow, T> Data<'borrow> for W<'borrow, T>
where
T: Debug + Send + Sync + 'static,
{
fn borrow(_item_id: &'borrow ItemId, resources: &'borrow Resources) -> Self {
<Self as DataBorrow>::borrow(resources)
}
}