1个不稳定版本

0.1.0 2024年3月16日

619过程宏

每月34次 下载

自定义许可

5KB
76

又一个Rust构建模式推导宏

用法

#[derive(Builder)]
struct Foo {
    pub a: i32,
    pub b: String,
    pub c: bool,
    pub d: Option<usize>,
}

let foo = Foo::builder()
    .a(-3)
    .b("Hello, world!".to_string())
    .c(true)
    .d(Some(2048))
    .build();

assert_eq!(-3, foo.a);
assert_eq!("Hello, world!".to_string(), foo.b);
assert_eq!(true, foo.c);
assert_eq!(Some(2048), foo.d);

注意

该宏要求字段实现 Default。如果未提供字段的值,它将分配默认值

#[derive(Builder)]
struct DefaultFoo {
    pub a: i32,
    pub b: bool,
}

let foo = DefaultFoo::builder()
    .build();

assert_eq!(0, foo.a);
assert_eq!(false, foo.b);

声明未实现 Default 特性的字段将导致编译错误

pub struct NonDefault {}

#[derive(Builder)]
pub struct Foo {
    d: NonDefault, // error[E0277]: the trait bound `NonDefault: Default` is not satisfied
}

依赖项

~275–720KB
~17K SLoC