#[macro_export]
macro_rules! impl_draw_node {
() => {
fn as_draw_node(&self) -> Option<&dyn $crate::DrawModifierNode> {
Some(self)
}
fn as_draw_node_mut(&mut self) -> Option<&mut dyn $crate::DrawModifierNode> {
Some(self)
}
};
}
#[macro_export]
macro_rules! impl_pointer_input_node {
() => {
fn as_pointer_input_node(&self) -> Option<&dyn $crate::PointerInputNode> {
Some(self)
}
fn as_pointer_input_node_mut(&mut self) -> Option<&mut dyn $crate::PointerInputNode> {
Some(self)
}
};
}
#[macro_export]
macro_rules! impl_semantics_node {
() => {
fn as_semantics_node(&self) -> Option<&dyn $crate::SemanticsNode> {
Some(self)
}
fn as_semantics_node_mut(&mut self) -> Option<&mut dyn $crate::SemanticsNode> {
Some(self)
}
};
}
#[macro_export]
macro_rules! impl_focus_node {
() => {
fn as_focus_node(&self) -> Option<&dyn $crate::FocusNode> {
Some(self)
}
fn as_focus_node_mut(&mut self) -> Option<&mut dyn $crate::FocusNode> {
Some(self)
}
};
}
#[macro_export]
macro_rules! impl_modifier_node {
(draw) => {
$crate::impl_draw_node!();
};
(pointer_input) => {
$crate::impl_pointer_input_node!();
};
(semantics) => {
$crate::impl_semantics_node!();
};
(focus) => {
$crate::impl_focus_node!();
};
(draw, $($rest:tt)*) => {
$crate::impl_draw_node!();
$crate::impl_modifier_node!($($rest)*);
};
(pointer_input, $($rest:tt)*) => {
$crate::impl_pointer_input_node!();
$crate::impl_modifier_node!($($rest)*);
};
(semantics, $($rest:tt)*) => {
$crate::impl_semantics_node!();
$crate::impl_modifier_node!($($rest)*);
};
(focus, $($rest:tt)*) => {
$crate::impl_focus_node!();
$crate::impl_modifier_node!($($rest)*);
};
}