Widget
This crate is centered around the concept of widgets, which are different than the gtk
widgets. In relm
, a widget is composed of a view, a model, and a method to update the model in reaction to events. The concept of widget is implemented by a trait in relm
: the Widget
trait.
Model
We'll start with an empty model and we'll populate it later in this chapter:
pub struct Model { }
As you can see, a model can be a simple structure. It could also be ()
if your widget don't need a model. Actually, it can be any type you want.
Besides the model, a widget needs to know the initial value of its model. To specify what it is, we need to implement the model()
method of the Widget
trait:
#[widget] impl Widget for App { fn model() -> Model { Model { } } // … }
Here, we use the #[widget]
 attribute provided by the relm_attributes
crate. Attributes are currently an unstable feature of the language, that's why we use nightly. We'll see in the section about the declarative view...