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