//! Build interactive programs using The Elm Architecture. use crate::core::text; use crate::core::window; use crate::core::{Element, Renderer}; use crate::Command; /// The core of a user interface for a multi-window application following The Elm Architecture. pub trait Program: Sized { /// The graphics backend to use to draw the [`Program`]. type Renderer: Renderer + text::Renderer; /// The type of __messages__ your [`Program`] will produce. type Message: std::fmt::Debug + Send; /// Handles a __message__ and updates the state of the [`Program`]. /// /// This is where you define your __update logic__. All the __messages__, /// produced by either user interactions or commands, will be handled by /// this method. /// /// Any [`Command`] returned will be executed immediately in the /// background by shells. fn update(&mut self, message: Self::Message) -> Command; /// Returns the widgets to display in the [`Program`] for the `window`. /// /// These widgets can produce __messages__ based on user interaction. fn view( &self, window: window::Id, ) -> Element<'_, Self::Message, Self::Renderer>; }