I think properly hygienic macros would disallow the use of `'a`, `T`, `state` and `self` here (since these ones are outside the macro), also, I'm not sure about defining the lifetime when it's not used?

And, you're missing `&mut` and `&mut[]`.