#[macro_export]
macro_rules! transition {
(pin const self $($rest:tt)*) => {
::core::compile_error!(
"the From state needs to be provided: use `transition!(pin const FromState self, ...)` or `transition!(pin const path::To::FromState, self, ...)`"
)
};
(pin dyn self $($rest:tt)*) => {
::core::compile_error!(
"the From state needs to be provided: use `transition!(pin dyn FromState self, ...)` or `transition!(pin dyn path::To::FromState, self, ...)`"
)
};
(const self $($rest:tt)*) => {
::core::compile_error!(
"the From state needs to be provided: use `transition!(const FromState self, ...)` or `transition!(const path::To::FromState, self, ...)`"
)
};
(dyn self $($rest:tt)*) => {
::core::compile_error!(
"the From state needs to be provided: use `transition!(dyn FromState self, ...)` or `transition!(dyn path::To::FromState, self, ...)`"
)
};
(pin const $marker:path, $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker))
};
(pin const $marker:path, $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker))
};
(pin const $marker:path, $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker), $($arg),+)
};
(pin dyn $marker:path, $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker))
};
(pin dyn $marker:path, $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker))
};
(pin dyn $marker:path, $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker), $($arg),+)
};
(pin const $marker:ident $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker))
};
(pin const $marker:ident $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker))
};
(pin const $marker:ident $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionPinConst($marker), $($arg),+)
};
(pin dyn $marker:ident $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker))
};
(pin dyn $marker:ident $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker))
};
(pin dyn $marker:ident $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionPinDyn($marker), $($arg),+)
};
(pin $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionPin())
};
(pin $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionPin())
};
(pin $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionPin(), $($arg),+)
};
(const $marker:path, $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker))
};
(const $marker:path, $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker))
};
(const $marker:path, $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker), $($arg),+)
};
(dyn $marker:path, $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker))
};
(dyn $marker:path, $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker))
};
(dyn $marker:path, $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker), $($arg),+)
};
(const $marker:ident $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker))
};
(const $marker:ident $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker))
};
(const $marker:ident $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionConst($marker), $($arg),+)
};
(dyn $marker:ident $state:expr) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker))
};
(dyn $marker:ident $state:expr,) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker))
};
(dyn $marker:ident $state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transitionDyn($marker), $($arg),+)
};
($state:expr) => {
$crate::transition!(@call $state._magicsm_transition())
};
($state:expr,) => {
$crate::transition!(@call $state._magicsm_transition())
};
($state:expr, $($arg:expr),+ $(,)?) => {
$crate::transition!(@call $state._magicsm_transition(), $($arg),+)
};
(@call $call:expr) => {
$call.call(())
};
(@call $call:expr, $($arg:expr),+ $(,)?) => {
$call.call(($($arg,)+))
};
}