1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use {
    super::NamedValue,
    crate::{error::SerializeError, types::Value},
};

#[derive(Debug)]
pub enum ActiveValue<T> {
    Set(T),
    Unset,
}

impl<T> ActiveValue<T>
where
    T: TryInto<Value>,
    <T as TryInto<Value>>::Error: Into<SerializeError>,
{
    pub fn insert_named_value(
        self,
        vec: &mut Vec<NamedValue>,
        name: &'static str,
    ) -> Result<(), SerializeError> {
        match self {
            Self::Set(value) => vec.push(NamedValue(name, value.try_into().map_err(Into::into)?)),
            Self::Unset => (),
        }
        Ok(())
    }
}

impl<T> Default for ActiveValue<T> {
    fn default() -> Self {
        Self::Unset
    }
}