#struct-fields #builder-pattern #setter #macro #automatic #methods #proc-macro

derive_setters

Rust宏,自动为结构体的字段生成setter方法

7个版本

0.1.6 2023年5月26日
0.1.5 2021年1月25日
0.1.4 2020年3月29日
0.1.2 2019年10月28日

#58 in 过程宏

Download history 20001/week @ 2024-04-23 21145/week @ 2024-04-30 20499/week @ 2024-05-07 18128/week @ 2024-05-14 19827/week @ 2024-05-21 19201/week @ 2024-05-28 20642/week @ 2024-06-04 19869/week @ 2024-06-11 20486/week @ 2024-06-18 20208/week @ 2024-06-25 20424/week @ 2024-07-02 25280/week @ 2024-07-09 25944/week @ 2024-07-16 24716/week @ 2024-07-23 23173/week @ 2024-07-30 24947/week @ 2024-08-06

102,839 每月下载量
38 个包中使用 (23 直接)

MIT/Apache

18KB
291

derive_setters

Build Status Latest Version Requires rustc 1.56+

Rust宏,自动为结构体的字段生成setter方法。这可以用于向纯数据结构添加setter,或帮助实现构建器。

有关创建单独构建器类型的相关库,请参阅 rust-derive-builder

基本用法示例

use derive_setters::*;

#[derive(Default, Setters, Debug, PartialEq, Eq)]
struct BasicStruct {
    #[setters(rename = "test")]
    a: u32,
    b: u32,
    c: u32,
}

assert_eq!(
    BasicStruct::default().test(30).b(10).c(20),
    BasicStruct { a: 30, b: 10, c: 20 },
);

附加选项

以下选项可以设置在整个结构体上。

  • #[setters(generate = false)] 将导致默认不生成setter方法。
  • #[setters(generate_private = false)] 将导致默认不生成私有字段的setter方法。
  • #[setters(generate_public = false)] 将导致默认不生成公共字段的setter方法。
  • #[setters(no_std)] 使生成的代码使用 core 而不是 std
  • #[setters(prefix = "with_")] 使所有字段的setter方法前缀为指定的字符串。
  • #[setters(generate_delegates(ty = "OtherTy", field = "some_field"))] 使此结构体上的所有setter方法在目标结构体上重复,而不是直接修改 self.some_field 而不是 self
  • #[setters#[setters(generate_delegates)] 与上面一样,但用没有参数的 get_field 调用代替直接访问字段。

以下是可以设置在字段上的选项。

  • #[setters(generate)] 将生成setter方法,覆盖结构体级别的设置。
  • #[setters(skip)] 不会生成setter方法。
  • #[setters(rename = "setter_name")] 使setter方法具有与字段不同的名称。这会覆盖 add_prefix

以下选项可以应用于整个结构体或单个字段。您可以使用以下方式禁用特定字段的特性:#[setters(option = false)]

  • #[setters(into)] 使得setter方法接受任何可以通过 Into 转换为字段类型的类型。
  • #[setters(strip_option)] 使得setter方法接受 T 而不是 Option<T>。如果应用于未包裹在 Option 中的字段,则不起作用。
  • #[setters(bool)] 使得setter方法不接受任何参数,并将字段设置为 true
  • #[setters(borrow_self)] 使得生成的setter方法借用 &mut self 而不是接受 self。这对于需要可变setter而不是不可变setter的代码风格更好。

许可证

此项目可使用以下许可证之一

由您选择。

贡献

除非您明确声明,否则您提交给enumset的任何有意贡献,根据Apache-2.0许可证定义,将按上述方式双授权,不附加任何额外条款或条件。

依赖关系

~0.6–1MB
~24K SLoC