9 个版本 (4 个重大更改)
0.4.3 | 2020 年 8 月 1 日 |
---|---|
0.4.2 | 2020 年 7 月 30 日 |
0.4.0 | 2020 年 5 月 16 日 |
0.3.1 | 2020 年 4 月 5 日 |
0.0.0 | 2019 年 10 月 14 日 |
#22 in #structural
119 个月下载量
在 structural 中使用
165KB
4.5K SLoC
此库提供了字段访问器特性和结构类型仿真的实现。
特性
以下是此库提供的一些功能
-
Structural
derive 宏,用于为每个公共字段实现访问器特性:GetField
/GetFieldMut
/IntoField
用于结构体,以及GetVariantField
/GetVariantFieldMut
/IntoVariantField
用于枚举。 -
StructuralExt
扩展特性,定义了访问字段的主要方法,只要类型实现了这些字段的访问器特性。 -
StrucWrapper
包装类型,作为StructuralExt
的替代。 -
structural_alias
宏,用于声明访问器特性的特性别名,使用字段-在-特性语法。 -
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" 功能默认启用,以便不了解 core
/alloc
crate 的用户无需传递功能即可启用 std
支持。
Cargo 功能
这些是 structural 中的 cargo 功能
-
std
:启用 std 支持,默认启用。 -
alloc
:启用 alloc crate 支持,默认启用。 -
specialization
:在 structural 中启用特殊化,而无需启用夜间功能标志。这对于特殊化在库最后更新后稳定下来的情况很有用。 -
nightly_specialization
:在 structural 中启用特殊化,需要夜间因为这将启用夜间功能。 -
impl_fields
:这允许在structural_alias
宏中使用field_name: impl Foo
字段,截至 2020-03-21 需要associated_type_bounds
Rust 夜间功能。
如果这不起作用,请尝试在 Rust 夜间版本中使用 "nightly_impl_fields" 功能。 -
nightly_impl_fields
等同于impl_fields
功能,并从 2020-03-21 日起启用使用此功能所需的associated_type_bounds
夜间功能。 -
use_const_str
:将TStr
(类型级别的字符串类型)的内部实现更改为使用一个&'static str
常量参数,而不是类型。
如果常量泛型(例如:struct Foo<const S: &'static str>;
)在稳定版中可用,请使用此功能。 -
nightly_use_const_str
:等同于use_const_str
功能,它还启用了 2020-03-21 日起所需的夜间 Rust 功能,以便使用常量泛型。 -
disable_const_str
:禁用常量泛型,如果在其他启用常量泛型的 crate 中导致此 Rust 版本的内部错误,则很有用。
为了性能原因,在 structural
中使用专业化。目前还没有比较启用和禁用专业化时的基准测试。
最低 Rust 版本
此 crate 支持 Rust 1.40 及更高版本,并使用构建脚本自动启用新版本的特性。
它需要 Rust 1.40 来在类型位置中使用过程宏,例如:TS
和 FP
。
许可证
根据您的选择,受 Apache License 2.0 或 MIT 许可证的许可。除非您明确说明,否则您故意提交给 Structural 的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何其他条款或条件。
lib.rs
:
structural 的实现细节。
依赖项
~1.7–2.6MB
~57K SLoC