Rust 定义新的 Uuid 命名空间
Rust define new Uuid namespace
我正在使用 rust uuid crate:https://crates.io/crates/uuid
我需要为我的程序使用自定义名称空间生成的“v5”ID。定义自定义命名空间的正确方法是什么?我查看了如何定义 NAMESPACE_OID
的源代码:
pub const NAMESPACE_DNS: Self = Uuid([
0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0,
0x4f, 0xd4, 0x30, 0xc8,
]);
但是,复制代码并将其放入我的模块(当然更改名称和字节)是行不通的。 (我已经预先计算了我的命名空间 Uuid 所需的字节数)
pub const NAMESPACE_MYOWN: Uuid = Uuid([...]);
然后我希望通过以下方式生成一个新的 Uuid:Uuid::new_v5(&NAMESPACE_MYOWN, "my string".as_bytes())
但错误发生在编译时常量 NAMESPACE_MYOWN
初始化时,错误为:cannot initialize a tuple struct which contains private fields constructor is not visible here due to private fields
我相信 rust crate 已经使这个使用字节的构造函数成为私有的?
当然,一个可能的解决方案是使用类似的方法:Uuid::parse_string
每次我需要命名空间 Uuid 时,都将字符串硬编码到某处。但是每次固定的时候都要计算命名空间的Uuid,好像有点浪费?
parse_string
也会出错,这意味着我需要处理错误等。当我可以事先保证我的命名空间 Uuid 是正确的时,会有很多开销。
有没有更好的方法?
您可以使用 Uuid::from_bytes
:
pub const NAMESPACE_DNS: Uuid = Uuid::from_bytes([
0x6b, 0xa7, 0xb8, 0x10,
0x9d, 0xad, 0x11, 0xd1,
0x80, 0xb4, 0x00, 0xc0,
0x4f, 0xd4, 0x30, 0xc8,
]);
我正在使用 rust uuid crate:https://crates.io/crates/uuid
我需要为我的程序使用自定义名称空间生成的“v5”ID。定义自定义命名空间的正确方法是什么?我查看了如何定义 NAMESPACE_OID
的源代码:
pub const NAMESPACE_DNS: Self = Uuid([
0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0,
0x4f, 0xd4, 0x30, 0xc8,
]);
但是,复制代码并将其放入我的模块(当然更改名称和字节)是行不通的。 (我已经预先计算了我的命名空间 Uuid 所需的字节数)
pub const NAMESPACE_MYOWN: Uuid = Uuid([...]);
然后我希望通过以下方式生成一个新的 Uuid:Uuid::new_v5(&NAMESPACE_MYOWN, "my string".as_bytes())
但错误发生在编译时常量 NAMESPACE_MYOWN
初始化时,错误为:cannot initialize a tuple struct which contains private fields constructor is not visible here due to private fields
我相信 rust crate 已经使这个使用字节的构造函数成为私有的?
当然,一个可能的解决方案是使用类似的方法:Uuid::parse_string
每次我需要命名空间 Uuid 时,都将字符串硬编码到某处。但是每次固定的时候都要计算命名空间的Uuid,好像有点浪费?
parse_string
也会出错,这意味着我需要处理错误等。当我可以事先保证我的命名空间 Uuid 是正确的时,会有很多开销。
有没有更好的方法?
您可以使用 Uuid::from_bytes
:
pub const NAMESPACE_DNS: Uuid = Uuid::from_bytes([
0x6b, 0xa7, 0xb8, 0x10,
0x9d, 0xad, 0x11, 0xd1,
0x80, 0xb4, 0x00, 0xc0,
0x4f, 0xd4, 0x30, 0xc8,
]);