#unique-id #type #id #unique #numbers #filename

unique-type-id-derive

为类型生成唯一ID的进程宏生成器

7个版本 (4个稳定版)

1.3.0 2023年11月29日
1.2.0 2023年3月24日
1.0.0 2020年2月23日
0.2.0 2017年12月10日
0.1.1 2017年12月9日

#62 in #number

Download history 19/week @ 2024-03-11 9/week @ 2024-03-18 151/week @ 2024-04-01 354/week @ 2024-04-08 153/week @ 2024-04-15 24/week @ 2024-04-22 34/week @ 2024-04-29 41/week @ 2024-05-06 8/week @ 2024-05-13 30/week @ 2024-05-20 42/week @ 2024-05-27 15/week @ 2024-06-03 9/week @ 2024-06-10 22/week @ 2024-06-17 21/week @ 2024-06-24

每月71次 下载
用于 2 crates

MIT 许可证

10KB
141

unique-type-id

Rust进程宏crate,用于为Rust类型生成唯一ID。

Crates badge CI Documentation MIT licensed GitHub Sponsors

它做了什么?

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

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

用法

  1. 在您的Cargo.toml中添加unique-type-id作为依赖项
[dependencies]
unique-type-id = "1"
  1. 创建一个结构体或枚举并使用该特剧行为
#[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);
}

这将生成一个类型文件(如果尚未创建),并将从0开始的ID放入每个尚未找到的类型中。这就是当您为类型预先定义了一组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。

选项

  • UniqueTypeIdFile - 允许指定写入/读取ID的文件名。
  • UniqueTypeIdType - 允许将ID数字类型从默认的u64更改为用户首选的类型。
  • UniqueTypeIdStart - 允许设置类型的起始ID数字。如果类型布局文件非常知名并且保证不会发生冲突,则可以使用。

UniqueTypeIdFile

#[derive(UniqueTypeId)]
#[UniqueTypeIdFile = "types2.toml"]
struct Test1;

UniqueTypeIdType

#[derive(UniqueTypeId)]
#[UniqueTypeIdType = "i16"]
struct Test;

UniqueTypeIdStart

#[derive(UniqueTypeId)]
#[UniqueTypeIdStart = "23"]
struct Test;

注意

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

许可证

本项目采用MIT许可证授权。

依赖项

~2MB
~43K SLoC