#uuid #suffix #type-id #distributed-systems #base32 #unique-identifier

typeid_suffix

实现了《TypeId》规范中UUID后缀部分的Rust库。

3个版本

1.2.0-alpha 2024年7月12日
1.1.0 2024年7月11日
1.0.2-beta.12024年7月13日
1.0.1-beta.12024年7月12日
1.0.0 2024年7月11日

491编码

Download history 78/week @ 2024-07-05 263/week @ 2024-07-12 7/week @ 2024-07-19 30/week @ 2024-07-26 2/week @ 2024-08-02

每月 380 次下载
mti 中使用

MIT/Apache

35KB
404

TypeIdSuffix

Crates.io Documentation License: MIT OR Apache-2.0

实现了《TypeID》规范后缀部分的Rust库。它提供了处理TypeId后缀的功能,这些后缀是UUID的base32编码表示,用于TypeId系统。

TypeIdPrefix crate结合,组成mti (Magic Type Id) crate

使用mti (Magic Type Id) crate以全面实现TypeID规范。

特性

  • UUID版本支持:实现了对UUIDv7和其他UUID版本的支持。
  • 灵活的架构:泛型实现可以处理各种UUID版本。
  • Base32编码/解码:高效地对UUID进行base32编码和解码。
  • 错误处理:对无效后缀和UUID提供全面的错误类型。
  • 验证:对TypeId后缀和UUID进行强大的验证。
  • 零成本抽象:设计为具有最小的运行时开销。
  • 可选跟踪:与tracing crate集成用于日志记录(可选特性)。

安装

将其添加到您的Cargo.toml

[dependencies]
typeid_suffix = "1.0.2-beta.1"

要启用可选功能

[dependencies]
typeid_suffix = { version = "1.0.2-beta.1", features = ["instrument"] }

使用方法

基本使用

use std::str::FromStr;
use typeid_suffix::prelude::*;
use uuid::Uuid;

fn main() {
    // Create a `TypeId`suffix from a `UUIDv7`
    let uuid = Uuid::now_v7();
    let suffix = TypeIdSuffix::new(uuid).expect("Valid `UUIDv7`");
    println!("TypeID suffix: {}", suffix);

    // Parse a `TypeId`suffix from a string
    let parsed_suffix = TypeIdSuffix::from_str("01h455vb4pex5vsknk084sn02q").expect("Valid suffix");
    
    // Convert back to a UUID
    let recovered_uuid: Uuid = suffix.try_into().expect("Valid UUID");
    assert_eq!(uuid, recovered_uuid);
}

处理其他UUID版本

use typeid_suffix::prelude::*;
use uuid::Uuid;

fn main() {
    let uuid = Uuid::new_v4();
    let suffix = TypeIdSuffix::new(uuid).expect("Valid UUID");
    println!("TypeID suffix for UUIDv4: {}", suffix);
}

错误处理

该包为各种失败情况提供详细的错误类型

use typeid_suffix::prelude::*;
use std::str::FromStr;

fn main() {
    let result = TypeIdSuffix::from_str("invalid_suffix");
    match result {
        Ok(_) => println!("Valid suffix"),
        Err(e) => println!("Invalid suffix: {}", e),
    }
}

可选跟踪

当启用instrument特性时,该包将使用tracing crate记录操作

[dependencies]
typeid_suffix = { version = "1.0.2-beta.1", features = ["instrument"] }

用例

  • 分布式系统:为分布式系统生成全局唯一、可排序的标识符。
  • 数据库系统:为数据库记录创建紧凑的base32编码标识符。
  • API开发:使用TypeId后缀作为API响应的一部分或用于资源标识。
  • 基于时间的排序:利用基于UUIDv7TypeId后缀的可排序性进行时间排序数据。

安全和正确性

此软件包已经经过彻底测试和验证

  • 全面的单元测试
  • 使用 proptest 进行基于属性的测试
  • 模糊测试

这些措施确保软件包在各种输入和条件下表现正确和安全。

最小支持的 Rust 版本 (MSRV)

本软件包保证可以在 Rust 1.60.0 及以后的版本中编译。

许可证

本项目许可协议为以下之一

任选其一。

贡献

欢迎贡献!请随时提交 Pull Request。

鸣谢

本软件包实现了 Jetpack.io 创建的 TypeID 规范 的一部分。

依赖项

~490KB