use accepts::Accepts;
use core::marker::PhantomData;
#[must_use = "StatefulCallback must be used to run the stateful callback"]
#[derive(Debug, Clone)]
pub struct StatefulCallback<Value, State, CallbackFn> {
state: State,
callback: CallbackFn,
_marker: PhantomData<Value>,
}
impl<Value, State, CallbackFn> StatefulCallback<Value, State, CallbackFn>
where
CallbackFn: Fn(&State, Value),
{
pub fn new(state: State, callback: CallbackFn) -> Self {
Self {
state,
callback,
_marker: PhantomData,
}
}
}
impl<Value, State, CallbackFn> Accepts<Value> for StatefulCallback<Value, State, CallbackFn>
where
CallbackFn: Fn(&State, Value),
{
fn accept(&self, value: Value) {
(self.callback)(&self.state, value);
}
}