mysql_connector/model/active_model/
mod.rs1mod active_reference;
2mod active_value;
3mod named_value;
4mod update_model;
5
6use {
7 super::Model,
8 crate::{error::Error, types::Value, Connection},
9};
10
11pub use {
12 active_reference::ActiveReference, active_value::ActiveValue, named_value::NamedValue,
13 update_model::UpdateModel,
14};
15
16#[allow(async_fn_in_trait)]
17pub trait ActiveModel<ModelData: super::ModelData>: Default {
18 async fn into_values(self, conn: &mut Connection) -> Result<Vec<NamedValue>, Error>;
19
20 fn primary(&self) -> Option<Value>;
21
22 async fn insert(self, conn: &mut Connection) -> Result<u64, Error>
23 where
24 Self: Sized,
25 {
26 let values = self.into_values(conn).await?;
27 let stmt = NamedValue::into_insert(&values, ModelData::TABLE)?;
28 let mut stmt = conn.prepare_statement(&stmt).await?;
29 stmt.execute(&values).await.map(|x| x.last_insert_id())
30 }
31}
32
33pub trait HasActiveModel: super::ModelData {
34 type ActiveModel: ActiveModel<Self>;
35
36 fn into_active_model(self) -> Self::ActiveModel;
40}