12 个版本 (4 个重大更新)
0.4.3 | 2020 年 8 月 1 日 |
---|---|
0.4.2 | 2020 年 7 月 30 日 |
0.4.1 | 2020 年 5 月 16 日 |
0.3.0-alpha | 2020 年 3 月 25 日 |
0.2.1 | 2019 年 11 月 28 日 |
#1816 in Rust 模式
每月 82 次下载
780KB
12K SLoC
此库提供字段访问器特性和结构类型的模拟。
特性
以下是此库提供的部分功能
-
Structural
derive 宏,用于为每个公共字段实现访问器特性:GetField
/GetFieldMut
/IntoField
用于结构体,以及GetVariantField
/GetVariantFieldMut
/IntoVariantField
用于枚举。 -
StructuralExt
扩展特性,定义了访问字段的主要方法,只要类型实现了那些字段的访问器特性。 -
StrucWrapper
包装类型,定义为StructuralExt
的替代方案。 -
structural_alias
宏,用于使用字段-in-特性语法声明访问器特性的特性别名。 -
impl_struct
宏,用于声明结构参数/返回类型,以及make_struct
用于构造匿名结构体。 -
FromStructural
和TryFromStructural
转换特性,与标准库中的From
和TryFrom
特性类似(但不完全相同),用于结构化类型。
示例
有关示例,您可以查看结构化 crate 根模块的示例部分。
说明
此库通过使用特性和特例对象作为界限来模拟结构化类型。
所有 structural
特性都是 dyn 兼容的(也称为对象安全),不会进行任何更改来使它们不兼容 dyn。
默认情况下,所有结构化类型都是开放的,结构体和枚举可以具有比所需更多的变体或字段。
唯一的例外是完全穷举枚举,其变体数和名称必须完全匹配,这在switch
宏中的变体穷举匹配很有用。
示例中具有 _SI
/_ESI
/_VSI
后缀的每个特性都是由 Structural
derive 宏生成的特性。这些特性将它们命名的类型实现的访问器特性别名。
必需的宏
使用此 crate 所需的唯一宏是用于 TStr
的宏,其他所有宏都会扩展为可以手动编写的代码(除了 __TS
类型,这是一个实现细节,只应由此 crate 的宏通过名称使用)。
变更日志
变更日志在 "Changelog.md" 文件中。
未来计划
使 FromStructural
和 TryFromStructural
特性可派生。
no-std 支持
要在 no_std 环境中使用 structural
,请禁用默认功能。
structural={version="0.4",default_features=false}
此 crate 只有少数项目需要 std
crate(而不是 core)。
"std" 和 "alloc" 特性默认启用,以便用户无需传递功能即可启用 std
支持。
Cargo 特性
以下是结构化中的 cargo 特性
-
std
:启用 std 支持,默认启用。 -
alloc
:启用 alloc crate 支持,默认启用。 -
specialization
:在结构化内部启用专用化,无需启用夜间功能标志。这是在专用化在此库上次更新后稳定后的情况。 -
nightly_specialization
:在结构化内部启用专用化,需要夜间因为启用夜间功能。 -
impl_fields
:这允许在structural_alias
宏中使用field_name: impl Foo
字段,截至 2020-03-21,此宏需要启用 Rust 夜间构建的associated_type_bounds
功能。
如果不起作用,请尝试使用 Rust 夜间构建中的 "nightly_impl_fields" 功能。 -
nightly_impl_fields
与impl_fields
功能等价,同时启用截至 2020-03-21 使用该功能所需的associated_type_bounds
夜间功能。 -
use_const_str
:将TStr
(类型级别字符串类型)的内部实现改为使用一个&'static str
常量参数,而不是类型。
如果稳定版上可以使用 const 泛型(例如:struct Foo<const S: &'static str>;
),请使用此功能。 -
nightly_use_const_str
:与use_const_str
功能等价,同时启用截至 2020-03-21 使用 const 泛型所需的 Rust 夜间功能。 -
disable_const_str
:禁用 const 泛型,如果其他启用 const 泛型的 crate 导致此 Rust 版本的内部错误,则很有用。
为了性能原因,在 structural
内部使用特殊化。目前还没有比较启用和禁用特殊化时的基准测试。
最低 Rust 版本
此 crate 支持 Rust 1.40 及以上版本,并使用构建脚本来自动启用来自新版本的特性。
它需要 Rust 1.40 来在类型位置使用过程宏,例如: TS
和 FP
。
许可证
根据您的选择,受 Apache License 2.0 或 MIT 许可证的约束。除非您明确表示,否则您提交给 Structural 的任何贡献,根据 Apache-2.0 许可证的定义,应如上所述双重许可,没有任何附加条款或条件。
依赖关系
~2MB
~44K SLoC