1 个不稳定版本

0.1.0 2024年4月12日

#2019 in Rust 模式

MIT/Apache

29KB
367 行代码(不包括注释)

build-deftly

该项目旨在通过尝试克隆 derive_builder 包来测试 derive-deftly 宏系统。

就目前情况来看,我认为我已经实现了 derive_builder 包的所有功能,但在某些情况下,我不得不使用不同的语法。我没有测试所有功能的组合;可能某些组合会失效。

转换为使用此包。

而不是这样...

use derive_builder::Builder;
#[derive(Builder)]
struct MyStruct {
   ...
}

改为这样

use derive_deftly::Deftly;
use build_deftly::templates::*;
#[derive(Deftly)]
#[derive_deftly(Builder)]

如果您使用任何 #[builder(...)] 选项,您将需要将它们更改为 #[deftly(builder(...))]

一些选项有不同的形式;见下文。

支持的选项

迄今为止,以下选项受到支持。(记住,它们位于 #[deftly(builder(...))] 内。)

  • pattern = "PAT" — 支持字段和结构体。 PAT 可以是 不可变所有者可变(默认值)。

  • setter(skip), setter(custom) — 在字段和结构体上受支持。请注意,我们不支持 skip=trueskip=falsecustom=truecustom=false。代替 skip=true,说 skip。代替 custom=true,说 custom。代替 skip=falsecustom=false,说 "enabled",就像在 setter(enabled) 中一样。(参见 derive-deftly#40,derive-deftly#48,derive-deftly#49。)

  • vis = "VISIBILITY" — 在字段和结构体上受支持。默认情况下,构建器和设置器与原始结构的可见性相同。要在构建器和其方法上覆盖此可见性,例如说 vis="pub"vis="pub(crate)"。这替换了 derive_builderpublicprivate 选项。

  • name = "NAME" — 在结构体上受支持。重命名生成的构建器结构和错误枚举。

  • setter(prefix = "PREFIX") — 在字段和结构体上受支持。为设置器方法添加前缀(带下划线)。

  • setter(name = "PREFIX") — 在字段上受支持。重命名单个设置器方法。

  • setter(into) — 在字段上受支持。使设置器对 V:Into<..> 进行泛型。

  • setter(try_into) — 在字段上受支持。使设置器对 V:TryInto<..> 进行泛型。

  • setter(try_into) — 支持在类型为 Option<T> 的字段上使用。使设置器接受 T 而不是 Option<T>。(当与 into 一起使用时,设置器接受 impl Into<T> 而不是 impl Into<Option<T>>;与 try_into 的行为类似。)

  • defaultdefault_val = "EXPR" — 支持在字段上使用。与 derive_builder 不同,这些是独立的选项,因为 derive_deftly 不支持具有可选值的选项。(参见 derive-deftly#40,derive-deftly#48。)

  • build_fn(skip) — 支持在结构体上使用。跳过生成 build() 函数。

  • build_fn(name = "NAME") — 支持在结构体上使用。为 build() 函数提供一个新名称。

  • build_fn(validate = "PATH") — 支持在结构体上使用。提供一个在构建器其他部分之前运行的函数,以验证其输入。该函数必须引用 Builder,并返回 Result<_, String>

  • build_fn(error = "NAME") — 支持在结构体上使用。提供一个用户定义的错误类型。它必须实现 From<UninitializedFieldError>

  • derive = "TYPES" — 支持在结构体上使用。使生成的 Builder 继承提供的逗号分隔的类型列表。与 derive_builder 不同,这必须是一个字符串。(参见 derive-deftly#56。)

  • struct_attr = "ATTRS"impl_attr = "ATTRS" — 支持在结构体上使用。声明应直接应用于构建器或其 impl 块的一个或多个属性。这些需要包括完整的属性语法,例如 struct_attr = "#[must_use]"。(这与 derive_builder 在名称和语法上有所不同;参见 derive-deftly#56。)

  • field_attr = "ATTRS", setter_attr = "ATTRS" — 在字段上支持。声明一个或多个应直接应用于构建器中字段或其setter函数的属性。这些属性需要包含完整的属性语法,例如 field_attr = "#[serde(default)]")。 (这与 derive_builder 在名称和语法上不同;见 derive-deftly#56.)

  • field(ty) — 在字段上支持。覆盖构建器中存储的字段的类型。

  • field(build_fn)field(try_build_fn) — 在字段上支持。覆盖从构建器中存储的字段生成字段的代码。这些选项需要一个表达式,该表达式必须评估为 self 上的一个函数。build_fn 变体应返回字段在底层结构体中出现的类型;try_build_fn 应返回一个 Result。 (这与 derive_builder 在名称和语法上不同;见 derive-deftly#55.)

  • sub_buildersub_builder(fn_name) — 在字段上支持。行为与 derive-deftly-fork-arti 相同。

其他功能

我们向您的原始类型添加了一个 Self::builder() 方法,该方法返回一个空构建器。

依赖关系

~3.5MB
~68K SLoC