/// Syntax sugar for initializing an `ActionList` /// /// # Example /// /// ```ignore /// actions!(DocumentMessage::Undo, DocumentMessage::Redo); /// ``` /// /// expands to: /// ```ignore /// vec![vec![DocumentMessage::Undo, DocumentMessage::Redo]]; /// ``` /// /// and /// ```ignore /// actions!(DocumentMessage; /// Undo, /// Redo, /// ); /// ``` /// /// expands to: /// ```ignore /// vec![vec![DocumentMessage::Undo, DocumentMessage::Redo]]; /// ``` /// macro_rules! actions { ($($v:expr_2021),* $(,)?) => {{ vec![$(vec![$v.into()]),*] }}; ($name:ident; $($v:ident),* $(,)?) => {{ vec![vec![$(($name::$v).into()),*]] }}; } /// Does the same thing as the `actions!` macro but wraps everything in: /// /// ```ignore /// fn actions(&self) -> ActionList { /// actions!(…) /// } /// ``` macro_rules! advertise_actions { ($($v:expr_2021),* $(,)?) => { fn actions(&self) -> $crate::utility_traits::ActionList { actions!($($v),*) } }; ($name:ident; $($v:ident),* $(,)?) => { fn actions(&self) -> $crate::utility_traits::ActionList { actions!($name; $($v),*) } } }