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 在 编码
每月11,772 次下载
用于 24 个 crate(15 个直接使用)
115KB
1.5K SLoC
rusty_ulid
这是 ULID(全局唯一字典序排序标识符)的 Rust 实现。
此 crate 支持 Rust 1.60.0 或更高版本。
查看 变更日志 了解所有更改的详细信息。
功能
- 根据 Crockford Base32 编码 指定的 ULID 字符串宽松解析。
- 直接创建字符串和二进制 ULID。
- 支持单调 ULID。
- 从
&[u8]
转换。 - 转换到和从
[u8; 16]
。 - 转换到和从
(u64, u64)
。 - 转换到和从
u128
。 - 可选的 serde 支持,用于人类可读和二进制编码。
- 可选使用 chrono 或 time。
- 可选的 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) -> Ulid
和 Ulid::next_strictly_monotonic(previous_ulid) -> Option<Ulid>
支持。
next_monotonic
允许随机部分溢出到零,而 next_strictly_monotonic
则返回 None
。
基准测试
通过执行 cargo bench
来运行基准测试。
选择正确的可选特性
解析和处理 ULIDs 不需要任何依赖。
生成 ULIDs 需要使用 rand
包以及 time
或 chrono
包之一。如果同时启用了 time
和 chrono
,则将使用 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 License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
许可协议
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可协议定义,应如上所述双许可,不附加任何额外条款或条件。
依赖项
~1-35MB
~503K SLoC