#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum FieldUpdate<T> {
#[default]
NoChange,
Set(T),
Clear,
}
impl<T> FieldUpdate<T> {
pub fn apply_to(self, field: &mut Option<T>) {
match self {
FieldUpdate::NoChange => {}
FieldUpdate::Set(value) => *field = Some(value),
FieldUpdate::Clear => *field = None,
}
}
pub fn is_change(&self) -> bool {
!matches!(self, FieldUpdate::NoChange)
}
}
impl<T> From<Option<T>> for FieldUpdate<T> {
fn from(opt: Option<T>) -> Self {
match opt {
Some(value) => FieldUpdate::Set(value),
None => FieldUpdate::Clear,
}
}
}