A `Message` should represent an application event (e.g. user interactions, command results, subscription results...). Therefore, it should always consist of pure, cloneable data.
37 lines
1.2 KiB
Rust
37 lines
1.2 KiB
Rust
//! Build interactive programs using The Elm Architecture.
|
|
use crate::{Clipboard, Command, Element, Renderer};
|
|
|
|
mod state;
|
|
|
|
pub use state::State;
|
|
|
|
/// The core of a user interface application following The Elm Architecture.
|
|
pub trait Program: Sized {
|
|
/// The graphics backend to use to draw the [`Program`].
|
|
type Renderer: Renderer;
|
|
|
|
/// The type of __messages__ your [`Program`] will produce.
|
|
type Message: std::fmt::Debug + Clone + Send;
|
|
|
|
/// The type of [`Clipboard`] your [`Program`] will use.
|
|
type Clipboard: Clipboard;
|
|
|
|
/// 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,
|
|
clipboard: &mut Self::Clipboard,
|
|
) -> Command<Self::Message>;
|
|
|
|
/// Returns the widgets to display in the [`Program`].
|
|
///
|
|
/// These widgets can produce __messages__ based on user interaction.
|
|
fn view(&mut self) -> Element<'_, Self::Message, Self::Renderer>;
|
|
}
|