pub trait State: 'static {
// Required method
fn draw(&mut self, framebuffer: &mut Framebuffer<'_>);
// Provided methods
fn update(&mut self, delta_time: f64) { ... }
fn handle_event(&mut self, event: Event) { ... }
fn transition(&mut self) -> Option<Transition> { ... }
}