1 个不稳定版本
0.1.0 | 2023年10月22日 |
---|
#745 在 过程宏 中
11KB
96 行
introspect
一个用于对 Rust 结构体和枚举进行反射的 crate。
请求功能 · 报告错误 · ⭐ 考虑星标仓库!⭐
注意:目前,仅实现了对每个受支持实体和成员的标识符名称和可选文档的反射。在 crate 开发时,这就是所需的全部。然而,我们将实现请求和/或接受添加额外反射的 pull requests——请只需在 问题页面 上留下问题!
📚 入门
您可以通过 GitHub 仓库将 introspect
添加为依赖项。
cargo add --git https://github.com/claymcleod/introspect.git introspect
然后,您可以使用 introspect::Introspected
trait 和相关 trait 来提取所需的信息。通常,您将使用 introspect::Introspect
derive 宏,如下所示。
use introspect::Entity;
use introspect::Introspect;
use introspect::IntrospectedEntity;
use introspect::IntrospectedMembers;
use introspect::Member;
/// This is the documentation for the [`Example`] enum.
///
/// We can add more text down here.
#[allow(dead_code)]
#[derive(Introspect)]
enum Example {
/// The first variant.
One,
/// The second variant.
///
/// And some more text.
Two,
}
fn main() {
// Access to the top-level entity characteristics.
match Example::introspected_entity() {
Entity::Enum(entity) => {
dbg!(entity.identifier());
dbg!(entity.documentation());
}
_ => unreachable!(),
}
// Access to the members of the entity.
for member in Example::introspected_members() {
match member {
Member::Variant(member) => {
dbg!(member.identifier());
dbg!(member.documentation());
}
_ => unreachable!(),
}
}
}
示例
您还可以查看 示例,了解如何使用此 crate。
🖥️ 开发
要启动开发环境,请使用以下命令。
# Clone the repository
git clone [email protected]:claymcleod/introspect.git
cd introspect
# Build the crate in release mode
cargo build --release
# List out the examples
cargo run --release --example
🚧️ 测试
在提交任何 pull requests 之前,请确保代码通过以下检查。
# Run the project's tests.
cargo test --all-features
# Ensure the project doesn't have any linting warnings.
cargo clippy --all-features
# Ensure the project passes `cargo fmt`.
cargo fmt --check
# Ensure the docs build successfully.
cargo doc
最低支持的 Rust 版本 (MSRV)
此 crate 旨在与 Rust 版本 1.74.0 或更高版本一起使用。它可能偶然地与更早版本的 Rust 一起工作。
🤝 贡献
欢迎贡献、问题和功能请求!请随时查看 问题页面。
📝 许可证
本项目可根据您的选择采用Apache 2.0或MIT协议。
版权所有 © 2023-至今 Clay McLeod。
依赖项
~315–760KB
~18K SLoC