#graph #directed-graph #dsl #description #macro #relationships #describing

graphiti

graphiti 提供了一个 Rust 宏 DSL 和构建器,用于使用可序列化的描述类型创建和描述任意相关的数据集

3 个版本

0.1.2 2023 年 10 月 16 日
0.1.1 2023 年 10 月 15 日
0.1.0 2023 年 10 月 15 日

2110 in 数据结构

MIT 许可证

10KB
166

graphiti

github crates.io docs.rs

graphiti 提供了一个 Rust 宏 DSL 和构建器,用于创建和描述任意相关的数据集,这些数据集由 Description 类型表示。

一个常见的用例是用于模拟物理模拟,其中您可能想利用实体组件系统,但又想通过有向图来描述模拟成员之间的关系。

使用 graphiti,可以使用类型安全的 Rust 宏 DSL 描述模拟,该 DSL 驱动构建器模式构建最终的 Description 类型。有了这个 Description,数据被组织起来,便于业务逻辑使用存储的数据。这可能用于游戏(ECS + Scenegraphs)、硬件模拟等。

使用方法

将以下内容添加到您的 Cargo.toml

graphiti = "0.1.2"

示例

fn main() {
    let description = graphiti::describe! {
        nodes: {
            device: "device",
            safety: "safety",
            controller: "controller",
            power: "power",
            control: "control",
            io: "io"
        },
        edges: {
            "config_standard": {
                device: [safety, controller, power, control, io],
                safety: [controller, power]
            },
            "config_alternate": {
                device: [controller, control, io],
                controller: [power]
            }
        }
    };
    println!("{description:#?}");
}

依赖项

~6MB
~91K SLoC