1 个不稳定版本
| 0.1.0 | 2024年4月12日 |
|---|
#2019 in Rust 模式
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=true,skip=false,custom=true或custom=false。代替skip=true,说skip。代替custom=true,说custom。代替skip=false或custom=false,说 "enabled",就像在setter(enabled)中一样。(参见 derive-deftly#40,derive-deftly#48,derive-deftly#49。) -
vis = "VISIBILITY"— 在字段和结构体上受支持。默认情况下,构建器和设置器与原始结构的可见性相同。要在构建器和其方法上覆盖此可见性,例如说vis="pub"或vis="pub(crate)"。这替换了derive_builder的public和private选项。 -
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 的行为类似。) -
default,default_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_builder,sub_builder(fn_name)— 在字段上支持。行为与derive-deftly-fork-arti相同。
其他功能
我们向您的原始类型添加了一个 Self::builder() 方法,该方法返回一个空构建器。
依赖关系
~3.5MB
~68K SLoC