pub trait Controller<State> {
fn get_state(&self) -> &State;
fn update<F>(&mut self, updater: F) -> ()
where
F: Fn(&mut State) -> ();
fn subscribe<F>(&mut self, subscriber: F) -> usize
where
F: 'static + FnMut(&State);
fn unsubscribe(&mut self, id: usize) -> ();
}