pub trait Catalog {
type Class<'a>;
// Required methods
fn default<'a>() -> Self::Class<'a>;
fn style(&self, class: &Self::Class<'_>, status: Status) -> Style;
}
Expand description
The theme catalog of a Button
.
All themes that can be used with Button
must implement this trait.
§Example
#[derive(Debug, Default)]
pub enum ButtonClass {
#[default]
Primary,
Secondary,
Danger
}
impl Catalog for MyTheme {
type Class<'a> = ButtonClass;
fn default<'a>() -> Self::Class<'a> {
ButtonClass::default()
}
fn style(&self, class: &Self::Class<'_>, status: Status) -> Style {
let mut style = Style::default();
match class {
ButtonClass::Primary => {
style.background = Some(Background::Color(Color::from_rgb(0.529, 0.808, 0.921)));
},
ButtonClass::Secondary => {
style.background = Some(Background::Color(Color::WHITE));
},
ButtonClass::Danger => {
style.background = Some(Background::Color(Color::from_rgb(0.941, 0.502, 0.502)));
},
}
style
}
}
Although, in order to use Button::style
with MyTheme
, Catalog::Class
must implement
From<StyleFn<'_, MyTheme>>
.
Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.