mysql_connector/model/active_model/
active_reference.rs1use {
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}