mysql_connector/model/active_model/
active_reference.rs

1use {
2    super::{ActiveModel, NamedValue},
3    crate::{model::Model, Connection, Error},
4};
5
6#[derive(Debug)]
7pub enum ActiveReference<T: Model> {
8    Set(T::Primary),
9    Insert(T::ActiveModel),
10    Unset,
11}
12
13impl<T: Model> ActiveReference<T> {
14    pub async fn insert_named_value(
15        self,
16        vec: &mut Vec<NamedValue>,
17        name: &'static str,
18        conn: &mut Connection,
19    ) -> Result<(), Error> {
20        match self {
21            Self::Set(id) => vec.push(NamedValue(name, id.into())),
22            Self::Insert(model) => {
23                let primary = model.primary();
24                let last_insert_id = model.insert(conn).await?;
25                vec.push(NamedValue(name, primary.unwrap_or(last_insert_id.into())));
26            }
27            Self::Unset => (),
28        }
29        Ok(())
30    }
31}
32
33impl<T: Model> Default for ActiveReference<T> {
34    fn default() -> Self {
35        Self::Unset
36    }
37}