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