use std::marker::PhantomData;
use crate::resource::{backed, perm};
pub trait Interface {
type Cmd: Send + 'static;
}
pub struct ResHandle<T, B = crate::resource::backed::Local<T>, P = perm::ReadOnly>
where
T: Interface,
B: backed::Backend<T, T::Cmd>,
{
backend: B,
_marker: PhantomData<(T, P)>,
}
impl<T, B, P> Clone for ResHandle<T, B, P>
where
T: Interface,
B: backed::Backend<T, T::Cmd> + Clone,
{
fn clone(&self) -> Self {
Self { backend: self.backend.clone(), _marker: PhantomData }
}
}
impl<T, B, P> ResHandle<T, B, P>
where
T: Interface,
B: backed::Backend<T, T::Cmd>,
{
pub fn from_backend(backend: B) -> Self {
Self { backend, _marker: PhantomData }
}
#[inline(always)]
pub fn backend(&self) -> &B {
&self.backend
}
}