#struct #automatic #apply #derive #generate #transform

struct_derive

自动应用于特定结构体类型的函数

2 个版本

0.2.1 2024年7月8日
0.2.0 2024年7月8日

#344过程宏

Download history 203/week @ 2024-07-06 15/week @ 2024-07-13 27/week @ 2024-07-27

245 每月下载量

MIT 许可证

6KB
77

struct_derive

StructUpdate 是Rust中的一个derive宏,它自动为你的结构体生成一个 update_struct 方法。该方法将结构体中所有类型为 String 的字段转换为 SCREAMING_SNAKE_CASE(所有字母大写,单词间用下划线分隔)。

使用方法

  1. 首先,你需要在你的 Cargo.toml 文件中添加 struct_derive 依赖。
[dependencies]
struct_derive = "0.2.1"
  1. 然后,你可以在你的结构体上使用 #[derive(StructUpdate)] 注解。同时,你还需要使用 #[update_struct(with(ty = String, func = "to_screaming_snake_case"))] 注解来指定需要更新的字段类型以及更新这些字段所使用的函数。
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,
}
  1. 现在,你的结构体有一个 update_struct 方法。你可以调用此方法来更新结构体中的字段。
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);
}

在上面的例子中,update_struct 方法将 usernamefirst_namelast_name 字段转换为 SCREAMING_SNAKE_CASE,但不会改变 age 字段,因为 age 字段不是 String 类型。

依赖项

~0.6–1MB
~24K SLoC