pub trait EffectFunction<T, M> {
fn run(&mut self, p: Option<T>) -> T;
}
pub struct SingleParam;
pub struct NoParam;
impl<Func, T> EffectFunction<T, SingleParam> for Func
where
Func: FnMut(Option<T>) -> T,
{
#[inline(always)]
fn run(&mut self, p: Option<T>) -> T {
(self)(p)
}
}
impl<Func> EffectFunction<(), NoParam> for Func
where
Func: FnMut(),
{
#[inline(always)]
fn run(&mut self, _: Option<()>) {
self()
}
}