1 个不稳定版本
0.1.0 | 2024年4月21日 |
---|
#712 in Rust 模式
14KB
65 行
fancy-default
本库为标准库的 Default
derive 宏提供了增强。
目录
泛型默认值配置
本库中所有默认值配置使用相同的语法。
- 字段配置
-
#[default]
:调用core::default::Default
并将其用作默认值。注意:当前
core::default::Default
不是一个常量特性,因此在使用ConstDefault
时必须指定默认值。 -
#[default = <expr>]
:将<expr>
用作此字段的默认值。注意:
better_default
不使用字符串字面量来解析表达式,因此您可以直接编写带有默认值的表达式,例如:#[default = "foobar".to_owned()]
。 -
#[default(expr = <expr>)]
:与之前格式相同。
-
- 变体配置(仅枚举)
#[default]
:将变体设置为枚举的默认变体。
此属性与标准库的#[default]
属性作用相同。
fancy_default::derive::默认值
基本用法
use fancy_default::Default;
#[derive(Debug, Default, PartialEq, Eq)]
struct Person {
#[default(expr = "no-name".to_owned())]
name: String,
#[default]
id: usize,
#[default(expr = Some("unknown".to_owned()))]
tag: Option<String>,
}
assert_eq!(
Person::default(),
Person {
name: "no-name".to_owned(),
id: 0,
tag: Some("unknown".to_owned()),
}
);
fancy_default::derive::ConstDefault
基本用法
// this imports both `fancy_default::derive::ConstDefault`
// and `fancy_default::traits::ConstDefault`.
use fancy_default::ConstDefault;
#[derive(Debug, ConstDefault, PartialEq, Eq)]
struct Person<'a> {
#[default = "no-name"]
name: &'a str,
#[default = 0]
id: usize,
#[default(expr = Some("unknown"))]
tag: Option<&'a str>,
}
assert_eq!(
Person::DEFAULT,
Person {
name: "no-name",
id: 0,
tag: Some("unknown"),
}
);
fancy_default::derive::VariantDefault
为枚举的每个变体设置默认值。此 derive 宏使用一个额外的属性 variant
来设置如何生成默认值。
配置语法
#[variant(<config>)]
:const
/const = <bool>
:是否生成常量默认值。对应的常量名称是当前枚举的大写版本。
默认值:false
。别名:constant
。func
/func = <bool>
:是否生成返回默认值的静态方法。对应的常量名称是当前枚举的小写蛇形版本,并带有default_
前缀。
默认值:true
。别名:fn
、function
。
注意: 此属性可以添加到枚举体或单个变体中。如果添加到枚举体中,将覆盖默认生成的配置。
基本用法
use fancy_default::VariantDefault;
#[derive(Debug, VariantDefault, PartialEq, Eq)]
#[variant(const)]
enum Enum {
Plain,
#[variant(const = false)]
Struct {
#[default(expr = "123".to_owned())]
name: String,
},
Tuple(#[default = 10] usize),
}
assert_eq!(Enum::PLAIN, Enum::Plain);
assert_eq!(
Enum::default_struct(),
Enum::Struct {
name: "123".to_owned()
}
);
MSRV
此 derive 宏的理论最小 Rust 版本是 1.34,从该版本开始允许将 TokenStream
传递给 MetaList
。
许可证
本库根据 MIT 许可证 或 Apache v2.0 许可证 许可。
依赖项
~0.7–1.2MB
~25K SLoC