mysql_connector/model/active_model/
update_model.rs1use {
2 super::{ActiveModel, Model, NamedValue},
3 crate::{error::Error, Connection},
4 std::ops::{Deref, DerefMut},
5};
6
7#[derive(Debug)]
8pub struct UpdateModel<T: Model> {
9 id: T::Primary,
10 model: T::ActiveModel,
11}
12
13impl<T: Model> UpdateModel<T> {
14 pub fn new(id: T::Primary) -> Self {
15 Self {
16 id,
17 model: T::ActiveModel::default(),
18 }
19 }
20
21 pub async fn update(self, conn: &mut Connection) -> Result<(), Error> {
22 let mut values = self.model.into_values(conn).await?;
23 if !values.is_empty() {
24 let stmt = NamedValue::into_update(&values, T::TABLE, T::PRIMARY)?;
25 values.push(NamedValue("", self.id.into()));
26 let mut stmt = conn.prepare_statement(&stmt).await?;
27 stmt.execute(&values).await.map(|_| ())
28 } else {
29 Ok(())
30 }
31 }
32}
33
34impl<T: Model> Deref for UpdateModel<T> {
35 type Target = T::ActiveModel;
36
37 fn deref(&self) -> &Self::Target {
38 &self.model
39 }
40}
41
42impl<T: Model> DerefMut for UpdateModel<T> {
43 fn deref_mut(&mut self) -> &mut Self::Target {
44 &mut self.model
45 }
46}