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
此库提供了字段访问器特性和结构类型仿真的实现。
特性
以下是此库提供的一些功能
-
Structuralderive 宏,用于为每个公共字段实现访问器特性: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_boundsRust 夜间功能。
如果这不起作用,请尝试在 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