7 个不稳定版本 (3 个破坏性版本)
0.4.0 | 2023年2月16日 |
---|---|
0.3.3 | 2023年2月3日 |
0.3.2 | 2023年1月27日 |
0.2.0 | 2023年1月25日 |
0.1.0 | 2023年1月24日 |
#201 in 值格式化
用于 seaplane
23KB
368 行
容器镜像引用
一个用于使用和处理 Seaplane 对象 ID 的库。
关于
对象 ID (OID) 是一个以前缀分隔的 RFC4648 base32(无填充)扩展十六进制编码的 UUID。
例如 tst-0ous781p4lu7v000pa2a2bn1gc
,根据惯例,前缀是三个 ASCII 小写字母,但这通常是 OID 的一般硬约束。当前实现将前缀限制为 3 个字符,但如果需要,前缀限制可以公开为可调。
产品理念
OID 允许以前缀的形式具有“可读性较高的主题行”,其中实际数据是 UUID。这意味着在调试或审查系统时,通过查看前缀就可以轻松地确定是否在特定位置传递了错误的 OID。这使用裸 UUID 是无法轻易实现的。
对 UUID 进行 Base32 编码也允许将数据压缩成更小、更易于人类阅读的格式,类似于提交哈希。
反对观点
OID 的缺点是在处理 ID 和值时存在一层间接性,OID 是一个带前缀的 UUID 并不是立即显而易见的。此外,必须以某种方式控制前缀,包括在更改时迁移,这为应用层添加了一层复杂性。
与裸 UUID 相比,OID 还存在额外的处理开销,包括编码/解码以及处理前缀的追加和删除。
然而,我们认为这些缺点与由此格式带来的好处相比微不足道。
示例
use seaplane_oid::{error::*, Oid};
fn main() -> Result<()> {
// OIDs can be created with a given prefix alone, which generates a new
// UUID
let oid = Oid::new("exm")?;
println!("{oid}");
// OIDs can be parsed from strings, however the "value" must be a valid
// base32 encoded UUID
let oid: Oid = "tst-0ous781p4lu7v000pa2a2bn1gc".parse()?;
println!("{oid}");
// OIDs can also be created from the raw parts
let oid = Oid::with_uuid(
"exm",
"063dc3a0-3925-7c7f-8000-ca84a12ee183"
.parse::<Uuid>()
.unwrap(),
)?;
// One can retrieve the various parts of the OID if needed
println!("Prefix: {}", oid.prefix());
println!("Value: {}", oid.value());
println!("UUID: {}", oid.uuid());
Ok(())
}
许可
许可协议为 Apache 许可协议第 2 版,LICENSE。版权所有 2023 Seaplane IO,Inc。
依赖关系
~2MB
~43K SLoC