4个版本
0.2.0 | 2022年8月5日 |
---|---|
0.1.2 | 2022年6月9日 |
0.1.1 | 2022年6月8日 |
0.1.0 | 2022年6月8日 |
1533 in 过程宏
25KB
531 代码行
该crate提供过程宏,用于生成返回结构体字段名或枚举变体名静态切片的函数。
示例
use fievar::Fields;
#[derive(Fields)]
struct File {
id: String,
name: String,
mime_type: String,
}
assert_eq!(&["id", "name", "mime_type"], File::fields());
您还可以重命名字段。
use fievar::Fields;
#[derive(Fields)]
struct File {
id: String,
name: String,
#[fievar(name = "mimeType")]
mime_type: String,
}
assert_eq!(&["id", "name", "mimeType"], File::fields());
转换
语法
表达式
[[T][|
Sep]]
Sep: 词分隔符。
可以是任何文本。
T: 确定如何转换字段/变体。
[[TrCase][
NumAlign]]
NumAlign: 控制数字的对齐。
1__
| __1
| _1_
TrCase: 控制字母的大小写。
[TrWord[
TrWord[
TrWord]]]
TrWord: 控制单个单词的大小写。
[TrChar[TrChar[TrChar]]]
TrChar: 控制单词中单个字符的大小写。
c
| C
TrCase 由最多三个用空格分隔的 TrWord 组成。如果只有一个 TrWord,则用于转换字段/变体中的所有单词。如果有两个 TrWord,则第一个 TrWord 应用于字段/变体的第一个单词,第二个 TrWord 应用于其余单词。如果有三个 TrWord,则第一个和最后一个 TrWord 应用于字段/变体的第一个和最后一个单词,第二个 TrWord 应用于其余单词。 TrChar 以类似的方式作用于单词中的字符。
示例
use fievar::Variants;
#[derive(Variants)]
enum E {
#[fievar(transform = "c")] // lowercase
AVeryLong0Variant,
#[fievar(transform = "C")] // uppercase
AVeryLong1Variant,
#[fievar(transform = "1__|_")] // align numeral left
AVeryLong2Variant,
#[fievar(transform = "__1|_")] // align numeral right
AVeryLong3Variant,
#[fievar(transform = "_1_|_")] // align numeral middle
AVeryLong4Variant,
#[fievar(transform = "c Cc")] // camelCase
AVeryLong5Variant,
#[fievar(transform = "c|_")] // snake_case
AVeryLong6Variant,
#[fievar(transform = "CcC cCc CcC _1_|*-*")] // something different
LastVeryLong7Variant,
}
let v = &[
"averylong0variant",
"AVERYLONG1VARIANT",
"A_Very_Long2_Variant",
"A_Very_Long_3Variant",
"A_Very_Long_4_Variant",
"aVeryLong5Variant",
"a_very_long6_variant",
"LasT*-*vERy*-*lONg*-*7*-*VarianT"
];
assert_eq!(v, E::variants());
依赖关系
~1.5MB
~37K SLoC