Skip to main content

component_shape/
value_change.rs

1/// Normalized value change derived from a component event.
2#[derive(Clone, Debug, Eq, PartialEq)]
3pub enum ValueChange<T> {
4    /// The component event did not change the value.
5    Unchanged,
6    /// Replace the value with the supplied value.
7    Set(T),
8    /// Clear an optional value.
9    Clear,
10}
11
12impl<T> ValueChange<T> {
13    /// Creates a value replacement change.
14    pub const fn set(value: T) -> Self {
15        Self::Set(value)
16    }
17
18    /// Creates an optional value clear change.
19    pub const fn clear() -> Self {
20        Self::Clear
21    }
22
23    /// Creates a no-op value change.
24    pub const fn unchanged() -> Self {
25        Self::Unchanged
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::ValueChange;
32
33    #[test]
34    fn value_change_helpers_construct_expected_variants() {
35        assert_eq!(ValueChange::set("x"), ValueChange::Set("x"));
36        assert_eq!(ValueChange::<String>::clear(), ValueChange::Clear);
37        assert_eq!(ValueChange::<String>::unchanged(), ValueChange::Unchanged);
38    }
39}