6 个版本 (3 个破坏性更新)
0.8.0 | 2024年1月4日 |
---|---|
0.7.0 | 2023年3月9日 |
0.6.0 | 2022年2月2日 |
0.5.3 | 2022年1月29日 |
#79 在 并发
11,068 每月下载量
在 6 crates 中使用
64KB
273 代码行
Svix - 作为服务的 Webhooks
Svix-KSUID (Rust)
纯 Rust 和完全测试的 KSUID 实现
此库完全兼容 Segment 的 KSUID 实现: https://github.com/segmentio/ksuid
对于 Python 版本,请查看 https://github.com/svix/python-ksuid
ksuid 是什么?
ksuid 是一个 K 排序的 UID。换句话说,KSUID 还存储日期组件,因此 ksuid 可以根据创建时间进行大致排序。
了解更多 这里。
用法
添加依赖项
[dependencies]
svix-ksuid = "^0.6.0"
use svix_ksuid::*;
let ksuid = Ksuid::new(None, None);
println!("{}", ksuid.to_string());
// 1srOrx2ZWZBpBUvZwXKQmoEYga2
更高的时间戳精度模式
Ksuid 有 1 秒的精度,这不足以满足所有用例。这就是为什么这个库提供了一个更高的精度模式,支持高达 4ms 的精度。
它与正常 ksuid 完全兼容,事实上,它输出有效的 ksuid。不同之处在于,它牺牲了一个字节的随机有效负载以换取这种精度。
代码也完全兼容
use svix_ksuid::*;
let ksuid = KsuidMs::new(None, None);
并且它们都实现了相同的 KsuidLike
特性。
可选功能
serde
- 使用 serde 序列化和反序列化Ksuid
和KsuidMs
。
确保这样启用
[dependencies]
svix-ksuid = { version = "^0.6.0", features = ["serde"] }
示例
转换 Ksuid
use svix_ksuid::*;
let ksuid = Ksuid::new(None, None);
// Base62
println!("{}", ksuid.to_string()); // also: ksuid.to_base62()
// 1srOrx2ZWZBpBUvZwXKQmoEYga2
// Bytes (&[u8])
println!("{:?}", ksuid.bytes());
// [13, 53, 196, 51, 225, 147, 62, 55, 242, 117, 112, 135, 99, 173, 199, 116, 90, 245, 231, 242]
// Timestamp (time::OffsetDateTime)
println!("{:?}", ksuid.timestamp());
// 2021-05-21T20:04:03Z
// Timestamp (seconds)
println!("{}", ksuid.timestamp_seconds());
1621627443
// Payload (&[u8])
println!("{:?}", ksuid.bytes());
// [225, 147, 62, 55, 242, 117, 112, 135, 99, 173, 199, 116, 90, 245, 231, 242]
创建 Ksuid
use svix_ksuid::*;
// Timestamp is now, payload is randomly generated
let ksuid = Ksuid::new(None, None);
// Explicitly set either
let bytes = [12u8; Ksuid::PAYLOAD_BYTES];
let ksuid = Ksuid::new(Some(Utc::now()), Some(&bytes));
let ksuid = Ksuid::new(None, Some(&bytes));
let ksuid = Ksuid::new(Some(Utc::now()), None);
// From base62
let base62 = "1srOrx2ZWZBpBUvZwXKQmoEYga2";
let ksuid = Ksuid::from_base62(base62).unwrap();
let ksuid = Ksuid::from_str(base62).unwrap(); // Also implement FromStr
// From bytes
let bytes = [12u8; 20];
let ksuid = Ksuid::from_bytes(bytes.clone());
assert_eq!(&bytes, ksuid.bytes());
比较和排序 Ksuid
use svix_ksuid::*;
let ksuid1 = Ksuid::from_seconds(Some(1_555_555_555), None);
let ksuid2 = Ksuid::from_seconds(Some(1_777_777_777), None);
assert!(ksuid1 < ksuid2);
assert!(ksuid1 <= ksuid2);
assert!(ksuid1 == ksuid1);
assert!(ksuid2 > ksuid1);
assert!(ksuid2 >= ksuid1);
许可证
ksuid 源代码可在 MIT 许可证 下使用。
版权所有 Svix Webhooks 服务。
依赖项
~0.8–1.2MB
~23K SLoC