# struct_derive `StructUpdate` is a derive macro in Rust that automatically generates an `update_struct` method for your struct. This method transforms all fields of type `String` in your struct to SCREAMING_SNAKE_CASE (all uppercase with underscores between words). ## Usage 1. First, you need to add the `struct_derive` dependency in your `Cargo.toml` file. ```toml [dependencies] struct_derive = "0.2.1" ``` 2. Then, you can use the `#[derive(StructUpdate)]` annotation on your struct. Also, you need to use the `#[update_struct(with(ty = String, func = "to_screaming_snake_case"))]` annotation to specify which type of fields need to be updated and what function to use to update these fields. ```rust use struct_derive::StructUpdate; fn to_screaming_snake_case(input: String) -> String { input.to_uppercase().replace(" ", "_") } #[derive(StructUpdate, Debug, Clone)] #[update_struct(with(ty = String, func = "to_screaming_snake_case"))] pub struct User { username: String, first_name: String, last_name: String, age: u32, } ``` 3. Now, your struct has an `update_struct` method. You can call this method to update the fields in the struct. ```rust fn main() { let mut user = User { username: "johndoe".to_string(), first_name: "John".to_string(), last_name: "Doe".to_string(), age: 30, }; println!("{:#?}", user); user.update_struct(); println!("{:#?}", user); } ``` In the example above, the `update_struct` method transforms the `username`, `first_name`, and `last_name` fields to SCREAMING_SNAKE_CASE, but does not change the `age` field, as the `age` field is not of type `String`.