#[macro_export]
macro_rules! where_into {
($($source:ty),+ => $target:ty) => {{
fn convert(event: &dyn ::std::any::Any) -> ::std::option::Option<$target> {
$(
if let Some(event) = event.downcast_ref::<$source>() {
let cloned = event.clone();
return Some(cloned.into());
}
)+
return None;
}
convert
}};
}
#[macro_export]
macro_rules! where_try_into {
($($source:ty),+ => $target:ty) => {{
fn convert(event: &dyn ::std::any::Any) -> ::std::option::Option<$target> {
$(
if let Some(event) = event.downcast_ref::<$source>() {
let cloned = event.clone();
if let Ok(mapped) = cloned.try_into() {
return Some(mapped);
}
}
)+
return None;
}
convert
}};
}
#[macro_export]
macro_rules! enum_from {
($($source:ty => $enum:tt :: $variant:tt),+) => {
$(
impl ::std::convert::From<$source> for $enum {
fn from(source: $source) -> Self {
<$enum>::$variant(source)
}
}
)+
};
}