ferroui_dynamic_data/kernel/option_else.rs
1//! `OptionElse` (`Kernel/OptionElse.cs`).
2
3/// What `if_has_value` returns: runs the action of [`else_`](Self::else_) when the option was
4/// empty (`OptionElse`).
5#[derive(Clone, Copy, Debug, PartialEq, Eq)]
6pub struct OptionElse {
7 should_run_action: bool,
8}
9
10impl OptionElse {
11 /// The result of an empty option, whose `else_` runs its action (`new OptionElse()`).
12 pub(crate) fn run() -> Self {
13 Self { should_run_action: true }
14 }
15
16 /// The result of an option with a value, whose `else_` does nothing (`OptionElse.NoAction`).
17 pub(crate) fn no_action() -> Self {
18 Self { should_run_action: false }
19 }
20
21 /// Runs `action` when the option was empty (`Else(Action)`; `else` is a keyword of Rust).
22 pub fn else_(&self, action: impl FnOnce()) {
23 if self.should_run_action {
24 action();
25 }
26 }
27}