mysql_connector/model/active_model/
update_model.rs

1use {
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}