#唯一标识符 #ulid #标识符 #可排序 #uuid #二进制编码

bin+lib rusty_ulid

Rust ULID(全局唯一字典序排序标识符)生成和处理

20 个版本 (2 个稳定版)

2.0.0 2023年1月28日
1.0.0 2022年1月22日
0.11.0 2021年7月4日
0.10.1 2021年1月25日
0.4.1 2018年7月2日

#163编码

Download history 4510/week @ 2024-03-13 3614/week @ 2024-03-20 3195/week @ 2024-03-27 5545/week @ 2024-04-03 3853/week @ 2024-04-10 3783/week @ 2024-04-17 5069/week @ 2024-04-24 2952/week @ 2024-05-01 2513/week @ 2024-05-08 3450/week @ 2024-05-15 2881/week @ 2024-05-22 3654/week @ 2024-05-29 3560/week @ 2024-06-05 3007/week @ 2024-06-12 2899/week @ 2024-06-19 1726/week @ 2024-06-26

每月11,772 次下载
用于 24 个 crate(15 个直接使用)

MIT/Apache

115KB
1.5K SLoC

rusty_ulid

Build Status codecov Crates.io docs.rs dependency status tokei Safety Dance

这是 ULID(全局唯一字典序排序标识符)的 Rust 实现。

此 crate 支持 Rust 1.60.0 或更高版本。

查看 变更日志 了解所有更改的详细信息。

功能

  • 根据 Crockford Base32 编码 指定的 ULID 字符串宽松解析。
  • 直接创建字符串和二进制 ULID。
  • 支持单调 ULID。
  • &[u8] 转换。
  • 转换到和从 [u8; 16]
  • 转换到和从 (u64, u64)
  • 转换到和从 u128
  • 可选的 serde 支持,用于人类可读和二进制编码。
  • 可选使用 chronotime
  • 可选的 rocket 路径/查询参数和表单值解析支持。
  • 可选的 schemars JsonSchema trait 实现 Ulid

快速入门

use rusty_ulid::generate_ulid_string;
use rusty_ulid::generate_ulid_bytes;

// Generate a ULID string
let ulid_string: String = generate_ulid_string();
assert_eq!(ulid_string.len(), 26);

// Generate ULID bytes
let ulid_bytes: [u8; 16] = generate_ulid_bytes();
assert_eq!(ulid_bytes.len(), 16);
use std::str::FromStr;
use rusty_ulid::Ulid;

// Generate a ULID
let ulid = Ulid::generate();

// Generate a string for a ULID
let ulid_string = ulid.to_string();

// Create ULID from a string
let result = Ulid::from_str(&ulid_string);

assert_eq!(Ok(ulid), result);
use rusty_ulid::Ulid;

// Alternative way to parse a ULID string
// This example assumes a function returning a Result.
let ulid: Ulid = "01CAT3X5Y5G9A62FH1FA6T9GVR".parse()?;

let datetime = ulid.datetime();
assert_eq!(datetime.to_string(), "2018-04-11 10:27:03.749 UTC");
# Ok::<(), rusty_ulid::DecodingError>(())

单调 ULID 通过 Ulid::next_monotonic(previous_ulid) -> UlidUlid::next_strictly_monotonic(previous_ulid) -> Option<Ulid> 支持。

next_monotonic 允许随机部分溢出到零,而 next_strictly_monotonic 则返回 None

基准测试

通过执行 cargo bench 来运行基准测试。

选择正确的可选特性

解析和处理 ULIDs 不需要任何依赖。

生成 ULIDs 需要使用 rand 包以及 timechrono 包之一。如果同时启用了 timechrono,则将使用 time 包来获取当前时间。

要启用 serde 支持,必须依赖 serde

以下依赖项默认启用:["rand", "time", "serde"]

您可以通过禁用 default-features 并明确指定启用的特性来更改此设置,如下所示

[dependencies]
rusty_ulid = { version = "2", default-features = false, features = ["rand", "chrono", "serde"] }

可执行文件

通过执行 cargo install --path . 或者在先前版本已安装的情况下,使用 cargo install --path . --force 来安装可执行文件。

rusty_ulid 使用示例

只需调用可执行文件即可生成 ULID。

$ rusty_ulid
01CB2EM1J4EMBWRBJK877TM17S

使用 -v--verbose 调用可执行文件将生成 ULID 并打印其时间戳。

$ rusty_ulid -v
01CB2EMMMV8P51SCR9ZH8K64CX
2018-04-14T16:08:33.691Z

使用任意数量的 ULIDs 进行检查,如果所有值都有效,则返回 0...

$ rusty_ulid 01CB2EM1J4EMBWRBJK877TM17S 01CB2EMMMV8P51SCR9ZH8K64CX
$ echo $?
0

...如果任何给定的值无效,则返回 1,并将无效值打印到 err

$ rusty_ulid 01CB2EM1J4EMBWRBJK877TM17S foo 01CB2EMMMV8P51SCR9ZH8K64CX
Invalid ULID strings: ["foo"]
$ echo $?
1

此外,-v--verbose 还将打印具有相应时间戳的 ULIDs。

$ rusty_ulid -v 01CB2EM1J4EMBWRBJK877TM17S foo 01CB2EMMMV8P51SCR9ZH8K64CX
01CB2EM1J4EMBWRBJK877TM17S
2018-04-14T16:08:14.148Z

01CB2EMMMV8P51SCR9ZH8K64CX
2018-04-14T16:08:33.691Z

Invalid ULID strings: ["foo"]

$ echo $?
1

执行 rusty_ulid -h 将打印帮助信息。

许可证

根据您的选择,受以下其中之一许可协议的约束

许可协议

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可协议定义,应如上所述双许可,不附加任何额外条款或条件。

依赖项

~1-35MB
~503K SLoC