use crate::{Application, Command, Element}; pub trait Sandbox { type Message: std::fmt::Debug + Send; fn new() -> Self; fn title(&self) -> String; fn update(&mut self, message: Self::Message); fn view(&mut self) -> Element; fn run() where Self: 'static + Sized, { ::run() } } impl Application for T where T: Sandbox, { type Message = T::Message; fn new() -> (Self, Command) { (T::new(), Command::none()) } fn title(&self) -> String { T::title(self) } fn update(&mut self, message: T::Message) -> Command { T::update(self, message); Command::none() } fn view(&mut self) -> Element { T::view(self) } }