#[macro_export]
macro_rules! transition {
(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,)+))
};
}