use core::any::Any;
#[derive(Copy,Clone,Debug)]
pub enum IsrCallback<F,R>
{
Nop(R),
Function(F),
WithData(F, *const dyn Any)
}
#[doc(hidden)]
#[macro_export]
macro_rules! isr_cb_invoke {
($isotoken:expr, $cb:expr, $($params:expr),*) => {
{
let cb : avr_oxide::hal::generic::callback::IsrCallback<_,_> = $cb;
match cb {
avr_oxide::hal::generic::callback::IsrCallback::Nop(r) => r,
avr_oxide::hal::generic::callback::IsrCallback::Function(f) => (f)($isotoken, $($params),*, Option::None),
avr_oxide::hal::generic::callback::IsrCallback::WithData(f,d) => (f)($isotoken, $($params),*, Option::Some(d))
}
}
}
}
impl<F,R> IsrCallback<F,R> {
pub fn is_nop(&self) -> bool {
match self {
IsrCallback::Nop(_) => true,
IsrCallback::Function(_) => false,
IsrCallback::WithData(_, _) => false
}
}
}