captures a mutable reference to self.state and the call to on_ready places this closure into the self.pen field. You’re creating a self-referencing struct here... this won’t work as easily. Actually, on a second thought, the closure doesn’t capture a mutable reference to self.state because it’s a move closure; instead it movesself: &mut Person into the closure. Still that’s a short-lived mutable reference incompatible with the (implicit “+ 'static”) requirement of Box<dyn FnMut(…) -> … + …>. Also, moving self like this introduces a conflict with the use of self.pen; that’s an error message you’d get if you e.g. turn the function into fn init(&'static mut self).
Anyway… One possible workaround is to introduce yet another Arc<Mutex<…>> around state. Or perhaps make it an Arc<AtomicU32>.