macro_rules! scan {
(@from [$source:expr] @rest) => { ... };
(@from [$source:expr] @rest mut $($rest:tt)*) => { ... };
(@from [$source:expr] @rest $($rest:tt)*) => { ... };
(@from [$source:expr] @mut [$($mut:tt)?] @rest $var:tt: $($rest:tt)*) => { ... };
(@from [$source:expr] @mut [$($mut:tt)?] @var $var:tt @kind [$($kind:tt)*] @rest) => { ... };
(@from [$source:expr] @mut [$($mut:tt)?] @var $var:tt @kind [$($kind:tt)*] @rest, $($rest:tt)*) => { ... };
(@from [$source:expr] @mut [$($mut:tt)?] @var $var:tt @kind [$($kind:tt)*] @rest $tt:tt $($rest:tt)*) => { ... };
(from $source:expr, $($rest:tt)*) => { ... };
($($rest:tt)*) => { ... };
}