1 2 3 4 5 6 7 8 9 10
#[macro_export] macro_rules! transition { ($state: expr => ($pattern: pat) $body: expr) => { $state = if let $pattern = std::mem::replace(&mut $state, S::Transitioning) { $body } else { unreachable!() }; }; }