#introspection #introspect #enums #documentation #member #identifier #name

introspect-core

包含用于 introspect 和支持库的核心功能的 crate

2 个版本

0.1.1 2023 年 10 月 23 日
0.1.0 2023 年 10 月 22 日

#1000Rust 模式


被用于 introspect-proc-macros

MIT/Apache

40KB
674

introspect

CI: Status License: Apache 2.0 License: MIT

一个用于在 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.0MIT

版权所有 © 2023-Present Clay McLeod

依赖项

~270–720KB
~17K SLoC