2 个版本
0.1.1 | 2023 年 10 月 23 日 |
---|---|
0.1.0 | 2023 年 10 月 22 日 |
#1000 在 Rust 模式
40KB
674 行
introspect
一个用于在 Rust 结构体和枚举上执行内省的 crate。
请求功能 · 报告错误 · ⭐ 考虑星标仓库!⭐
注意:目前,仅实现了支持实体和成员的标识符名称以及可选的文档。在 crate 开发时这已足够。然而,我们将实现请求并/或接受添加附加内省的拉取请求——请在 问题页面 上留下问题!
📚 入门
您可以通过 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
🚧️ 测试
在提交任何拉取请求之前,请确保代码通过了以下检查。
# 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-Present Clay McLeod。
依赖项
~270–720KB
~17K SLoC