#introspect #macro #proc-macro #procedural #enums #introspection #issue

introspect-proc-macros

用于 introspect 的过程宏

1 个不稳定版本

0.1.0 2023年10月22日

#745过程宏

MIT/Apache

11KB
96

introspect

CI: Status License: Apache 2.0 License: MIT

一个用于对 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.0MIT协议。

版权所有 © 2023-至今 Clay McLeod

依赖项

~315–760KB
~18K SLoC