#unique-id #type #id #unique #numbers #proc-macro

已删除 unique_type_id_workspace

为 unique_type_id crate 提供的工作空间

使用旧 Rust 2015

1.1.0 2023年3月24日
1.0.0 2020年2月23日

#61 in #number

MIT 许可证

12KB

unique-type-id

一个用于为 Rust 类型生成唯一 ID 的 rust 程序化宏 crate。

MIT licensed

它做什么?

它简单地实现了一个只包含一个方法的 trait - id() -> TypeId,它返回一个唯一的正数。对于 ID 生成,程序化宏读取名为 "types.toml" 的文件并搜索其中的类型名称。您还可以通过使用 UniqueTypeIdFile 属性来指定另一个文件名。更详细地说

  1. 程序化宏读取类型上的属性。
  2. 如果没有属性,它使用 types.toml 文件名作为类型文件名,否则使用指定的一个。
  3. 对于每个使用的宏,它会尝试在类型文件中找到类型名称。如果找到了,就返回它的 ID,否则返回可用的 ID。阅读测试可以帮助理解这一点。

用法

  1. 在您的 Cargo.toml 中添加 unique-type-id 作为依赖项
[dependencies]
unique-type-id-derive = "0.2"
unique-type-id = "0.2"
  1. 创建一个结构体或枚举并使用此 trait
#[macro_use]
extern crate unique_type_id_derive;
extern crate unique_type_id;

#[test]
fn Unique_simple() {
    use unique_type_id::UniqueTypeId;
    #[derive(UniqueTypeId)]
    struct Test1;
    #[derive(UniqueTypeId)]
    struct Test2;
    
    assert_eq!(Test1::id().0, 1u64);
    assert_eq!(Test2::id().0, 2u64);
}

如果没有创建,这将生成一个类型文件并将 ID 放在那里,每个未找到的类型从 0 开始。这是当您为您的类型预定义了一组 ID 时的样子

#[test]
fn Unique_different_file() {
    use unique_type_id::UniqueTypeId;
    #[derive(UniqueTypeId)]
    #[UniqueTypeIdFile = "types2.toml"]
    struct Test1;
    #[derive(UniqueTypeId)]
    #[UniqueTypeIdFile = "types2.toml"]
    struct Test2;

    assert_eq!(Test1::id().0, 115u64);
    assert_eq!(Test2::id().0, 232u64);
}

在这里,我们通过创建 types2.toml 文件手动设置我们的类型 ID。

注意

默认和自定义类型文件是在调用 cargo build 的目录中相对搜索的。

许可证

本项目受 MIT 许可证 许可。

依赖项

~0.4–1MB
~20K SLoC