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

Download history 7/week @ 2024-03-19 2/week @ 2024-03-26 24/week @ 2024-04-02 4/week @ 2024-04-09 18/week @ 2024-04-16 11/week @ 2024-04-23 2/week @ 2024-05-07 8/week @ 2024-05-14 14/week @ 2024-05-21 10/week @ 2024-05-28 29/week @ 2024-06-04 21/week @ 2024-06-11 22/week @ 2024-06-18 38/week @ 2024-06-25 37/week @ 2024-07-02

119 个月下载量
structural 中使用

MIT/Apache

165KB
4.5K SLoC

Build Status Join the chat at https://gitter.im/structural_crates/community

此库提供了字段访问器特性和结构类型仿真的实现。

特性

以下是此库提供的一些功能

示例

有关示例,您可以查看 结构化crate根模块文档中的示例部分

说明

该库通过使用特性和特对象作为边界来模拟结构化类型。

所有 structural 特性都是 dyn 兼容的(也称为对象安全),不会进行任何更改以使其不与 dyn 兼容。

默认情况下,所有结构化类型都是开放的,结构体和枚举可以有比必需的更多变体或字段。
唯一例外是穷举枚举,其变体计数和名称必须完全匹配,这对于在 switch 宏中进行穷举匹配很有用。

在示例中带有 _SI/_ESI/_VSI 后缀的每个特性都是由 Structural derive 宏生成的特性。这些特性将它们命名的类型实现的访问器特性别名为别名。

所需的宏

要使用此 crate,唯一需要的宏是用于 TStr 的宏,其他所有宏都扩展为可以手动编写的代码(除了 __TS 类型,这是一个实现细节,仅由此 crate 的宏通过名称使用)。

变更日志

变更日志在 "Changelog.md" 文件中。

未来计划

使 FromStructuralTryFromStructural 特性可派生。

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 来在类型位置中使用过程宏,例如:TSFP

许可证

根据您的选择,受 Apache License 2.0 或 MIT 许可证的许可。除非您明确说明,否则您故意提交给 Structural 的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何其他条款或条件。


lib.rs:

structural 的实现细节。

依赖项

~1.7–2.6MB
~57K SLoC