3个版本

0.1.2 2021年10月10日
0.1.1 2021年10月10日
0.1.0 2021年10月10日

#2120过程宏

每月 29 次下载

MIT 许可证

11KB

compiled-uuid

github-img crates-img docs-img

在任何从字符串字面量构建 Uuid 的地方,您应该使用 uuid

动机

如果您想在整个程序中使用固定的 Uuid 并避免多次解析,通常您可能会使用 lazy_static 在第一次解析后缓存 Uuid

lazy_static! {
    pub static ref MY_UUID: Uuid = Uuid::parse_str("550e8400-e29b-41d4-a716-446655440000").unwrap();
}

然而,这种方法通过运行时的解析和 unwrap 引入了开销。

另一方面,uuid 提供了一个零成本的运行时解决方案

const MY_UUID: Uuid = uuid!("550e8400-e29b-41d4-a716-446655440000");

用法

compiled_uuid 暴露了一个名为 uuid 的宏,该宏在编译时解析 Uuid。在成功的情况下,它解析为 Uuid::from_bytes,它不会失败且没有运行时成本。

当您编写此内容时

let id: Uuid = uuid!("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4");

它扩展为以下内容

let id: Uuid = ::uuid::Uuid::from_bytes([
	249u8, 22u8, 140u8, 94u8, 206u8, 178u8, 79u8, 170u8, 182u8, 191u8, 50u8, 155u8, 243u8,
	159u8, 161u8, 228u8,
]);

如果UUID无法成功解析

let id: Uuid = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");

则引发编译错误

error: invalid character: expected an optional prefix of `urn:uuid:` followed by 0123456789abcdefABCDEF-, found Z at 9
   |
   |     let id: Uuid = uuid!("F9168C5E-ZEB2-4FAA-B6BF-329BF39FA1E4");
   |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

许可证

compiled-uuid 是开源软件,按照MIT许可证分发。

依赖项

~0.5–1MB
~22K SLoC