Skip to main content

SqlModelUpdate

Trait SqlModelUpdate 

Source
pub trait SqlModelUpdate:
    Model
    + Serialize
    + DeserializeOwned {
    // Provided methods
    fn sqlmodel_update(
        &mut self,
        input: impl Into<UpdateInput>,
        options: UpdateOptions,
    ) -> ValidateResult<()> { ... }
    fn sqlmodel_update_dict(
        &mut self,
        dict: HashMap<String, Value>,
    ) -> ValidateResult<()> { ... }
    fn sqlmodel_update_from(
        &mut self,
        source: &Self,
        options: UpdateOptions,
    ) -> ValidateResult<()>
       where Self: Sized { ... }
}
Expand description

Trait for models that support sqlmodel_update().

This enables updating a model instance from a dictionary or another model’s values.

§Example

use sqlmodel_core::validate::{SqlModelUpdate, UpdateInput, UpdateOptions};

let mut user = User { id: 1, name: "Alice".to_string(), age: 30 };

// Update from a HashMap
user.sqlmodel_update(
    HashMap::from([("name".to_string(), serde_json::json!("Bob"))]),
    UpdateOptions::default()
)?;
assert_eq!(user.name, "Bob");

// Update only specific fields
user.sqlmodel_update(
    HashMap::from([
        ("name".to_string(), serde_json::json!("Carol")),
        ("age".to_string(), serde_json::json!(25))
    ]),
    UpdateOptions::default().update_fields(["name"])
)?;
assert_eq!(user.name, "Carol");
assert_eq!(user.age, 30); // age was not updated

Provided Methods§

Source

fn sqlmodel_update( &mut self, input: impl Into<UpdateInput>, options: UpdateOptions, ) -> ValidateResult<()>

Update a model instance from input.

This method merges values from the input into the current model. Only fields present in the input (and allowed by update_fields option) are updated.

§Arguments
  • input - The source of update values (Dict or JsonValue)
  • options - Update options controlling which fields to update
§Returns

Ok(()) if the update succeeds, or a validation error if the resulting model fails validation.

Source

fn sqlmodel_update_dict( &mut self, dict: HashMap<String, Value>, ) -> ValidateResult<()>

Update a model instance from a HashMap with default options.

Source

fn sqlmodel_update_from( &mut self, source: &Self, options: UpdateOptions, ) -> ValidateResult<()>
where Self: Sized,

Copy non-None/non-null values from another model into this one.

This is useful for partial updates where you have a “patch” model with only the fields that should be updated (non-None values).

§Arguments
  • source - The source model to copy values from
  • options - Update options controlling which fields to update
§Example
let mut user = User { id: 1, name: "Alice".to_string(), age: Some(30) };
let patch = User { id: 0, name: "Bob".to_string(), age: None };

// Only update name, skip None age
user.sqlmodel_update_from(&patch, UpdateOptions::default())?;
assert_eq!(user.name, "Bob");
assert_eq!(user.age, Some(30)); // Unchanged because patch.age is None

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<T: Model + Serialize + DeserializeOwned> SqlModelUpdate for T

Blanket implementation for all Model types that implement Serialize + DeserializeOwned.