Taking a reference as parameter
If you're taking a reference as parameter, you can mostly follow chapter 1.1 or chapter 1.2, however with one little exception:
Your implementation for State needs to work with every possible
lifetime 'a. So it has to look like that:
impl<'a> State<&'a Argument, Error, Event> for MyState {}
It is very important that 'a is not bound on anything.
If your state has a lifetime 'b, you have to declare
two lifetimes for the State implementation, otherwise
a given MyState<'a> would only implement State<'a>
(but it has to implement State for every possible
lifetime which Rust expresses with for<'a> State<'a>).