4 个稳定版本
使用旧的 Rust 2015
1.1.0 | 2018 年 11 月 2 日 |
---|---|
1.0.3 | 2018 年 11 月 1 日 |
在 #field-name 中排名第 37
每月下载量 1,516
用于 11 个 包(4 个直接使用)
17KB
241 行
字段类型
本库提供了 FieldName
和 FieldType
派生宏,用于派生 StructFieldName
和 StructFieldType
枚举,这些枚举对应于任何具有一些字段的 Struct
结构。
..FieldName
枚举包含与结构体字段名称对应的单元类型。此外,您可以使用 name
方法获取字段的静态字符串表示,并使用 by_name
方法通过字符串获取 ..FieldName
变体。
FieldName
使用示例
use field_types::FieldName;
#[derive(FieldName)]
struct Test {
first: i32,
second_field: Option<String>,
#[field_name(skip)]
third: bool,
}
assert_eq!(TestFieldName::First.name(), "first");
assert_eq!(TestFieldName::SecondField.name(), "second_field");
assert_eq!(Some(TestFieldName::First), TestFieldName::by_name("first"));
assert_eq!(Some(TestFieldName::SecondField), TestFieldName::by_name("second_field"));
assert_eq!(None, TestFieldName::by_name("third"));
let fields = Test::as_field_name_array();
assert_eq!([TestFieldName::First, TestFieldName::SecondField], fields);
..FieldType
枚举包含一些类型,这些类型与结构体字段的名称相对应,并且与结构体字段的值类型相对应。
FieldType
使用示例
use field_types::FieldType;
use variant_count::VariantCount;
#[derive(FieldType)]
#[field_type_derive(VariantCount)]
struct Test {
first: i32,
second_field: Option<String>,
#[field_type(skip)]
third: bool,
}
let test = Test {
first: 1,
second_field: Some("test".to_string()),
third: true,
};
let fields: [TestFieldType; TestFieldType::VARIANT_COUNT] = test.into();
// or
// let fields = test.into_field_type_array();
assert!(match fields {
[TestFieldType::First(1), TestFieldType::SecondField(Some(ref s))] if s == "test" => true,
_ => false,
});
在两种情况下,您都可以跳过带有 #[attr(skip)]
或 #[attr = "skip"]
属性的字段,其中 attr
是 FieldName
的 field_name
,field_type
的 FieldType
,或任何字段类型的 field_types
。您还可以使用 #[attr_derive(..)]
结构属性指定生成枚举的一些派生,其中 attr_derive
是 field_name_derive
,field_type_derive
或 field_types_derive
。例如
#[derive(FieldType, FieldName)]
#[field_types_derive(VariantCount, Debug, Clone, PartialEq)]
struct Test {
first: i32,
second: Option<String>,
#[field_types(skip)]
third: bool,
#[field_name = "skip"]
fourth: bool,
}
默认情况下,FieldName
拥有派生 Debug
,PartialEq
,Eq
,Clone
和 Copy
。更多用法示例请参阅 tests 目录。
用法
如果您使用 Cargo,只需将其添加到您的 Cargo.toml
[dependencies]
field_types = "*"
许可证
MIT
依赖关系
~2.5MB
~54K SLoC