use core::marker::PhantomData;
pub trait Cap {
fn write() -> bool;
fn read() -> bool;
}
macro_rules! capabilities {
($t:ident, $cw:expr, $cr:expr) => {
pub struct $t;
impl Cap for $t {
fn write() -> bool { $cw }
fn read() -> bool { $cr }
}
}
}
capabilities! {CW, true, false}
capabilities! {CA, true, true}
capabilities! {CR, false, true}
pub struct EvmBox<C: Cap, T>{
_phantom: PhantomData<(C, T)>
}