3个版本
0.1.2 | 2021年10月10日 |
---|---|
0.1.1 | 2021年10月10日 |
0.1.0 | 2021年10月10日 |
#2120 在 过程宏
每月 29 次下载
11KB
compiled-uuid
在任何从字符串字面量构建 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