#builder #builder-pattern #struct #required #macro #optional #procedural

simple-builder

用于为任何结构体创建 builder 模式结构体的过程宏

1 个不稳定版本

0.0.2 2023 年 10 月 12 日

#2981Rust 模式

36 每月下载量
kraken-async-rs 中使用

MIT 许可证

11KB
179

simple-builder

为任意 Rust 结构体实现 builder 模式的简单实现。

badge License: MIT

这个包可以很容易地被称为 "又一 builder" (YAB 简称),但它填补了那些不太关注 builder 实现功能,而更关注使用便利性的空白。 特别是这个实现是为那些具有多个必需字段和许多可选字段的 struct 量身定制的。 例如,这可能是端点的查询参数,必需字段如 nonce 和 id,然后是许多可选过滤参数,如开始和结束日期、价格范围、产品类型等。这个宏正是为这种特定用例量身打造的。

示例:简单用例

use simple_builder_macro::Builder;

// Debug, PartialEq, Eq are only for assertions
#[derive(Debug, PartialEq, Eq, Builder)]
struct Breakfast {
    #[builder(required)]
    pub coffee: i64, // coffee is required, and therefore not Option<T>
    pub toast: Option<i64>,
    pub eggs: Option<i64>,
    pub bacon: Option<i64>,
}

pub fn main() {
    let desired_breakfast = Breakfast {
        coffee: 1,
        toast: None,
        eggs: Some(3),
        bacon: Some(2),
    };
    
    // semantically equivalent to `Breakfast::builder(16)`
    let mut builder = BreakfastBuilder::new(16);
    let breakfast = builder.eggs(3).bacon(2).build();
    
    assert_eq!(desired_breakfast, breakfast);
}

依赖

~1–9MB
~80K SLoC