macro_rules! lifecycle { (mut $state:ident, $start:block, $stop:block) => { ... }; ($state:ident, $start:block, $stop:block) => { ... }; ($start:block, $stop:block) => { ... }; }