#field #traits #enums #accessor #macro #access #struct

no-std structural

字段访问器特性和结构类型的模拟

12 个版本 (4 个重大更新)

0.4.3 2020 年 8 月 1 日
0.4.2 2020 年 7 月 30 日
0.4.1 2020 年 5 月 16 日
0.3.0-alpha2020 年 3 月 25 日
0.2.1 2019 年 11 月 28 日

#1816 in Rust 模式

Download history 16/week @ 2024-03-11 9/week @ 2024-03-18 32/week @ 2024-04-01 4/week @ 2024-04-15 1/week @ 2024-04-22 13/week @ 2024-05-20 5/week @ 2024-05-27 26/week @ 2024-06-03 14/week @ 2024-06-10 18/week @ 2024-06-17 23/week @ 2024-06-24

每月 82 次下载

MIT/Apache

780KB
12K 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" 特性默认启用,以便用户无需传递功能即可启用 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_fieldsimpl_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 来在类型位置使用过程宏,例如: TSFP

许可证

根据您的选择,受 Apache License 2.0 或 MIT 许可证的约束。除非您明确表示,否则您提交给 Structural 的任何贡献,根据 Apache-2.0 许可证的定义,应如上所述双重许可,没有任何附加条款或条件。

依赖关系

~2MB
~44K SLoC