Skip to main content

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}