5个版本 (稳定版)
1.2.2 | 2024年3月24日 |
---|---|
1.2.1 | 2024年3月23日 |
1.1.0 | 2024年3月23日 |
1.0.0 | 2024年2月16日 |
0.1.0 | 2022年3月10日 |
#847 in 编码
每月下载量 35
14KB
271 行
友好通用标识符(FUID)
FUIDs是包裹128位无符号整数,这使得它们与UUID具有相同的分辨率。FUIDs序列化为Base62,这是一系列数字和字母。这使得它们比普通的UUID编码更短,更容易处理,但在随机生成时使用UUID生成算法,因此与UUID同构。使用FUIDs的一个优点是,可以将它们转换为短字符串,这些字符串可以用作测试的人读标识符,但在生产中可以是全长的随机数。
lib.rs
:
生成和解析友好通用标识符(FUIDs)
以下是一个FUID的示例
6fTiplVKIi6bJFe8rTXPcu
FUIDs是包裹128位无符号整数,这使得它们与UUID具有相同的分辨率。FUIDs序列化为Base62,这是一系列数字和字母。这使得它们比普通的UUID编码更短,更容易处理,但在随机生成时使用UUID生成算法,因此与UUID同构。使用FUIDs的一个优点是,可以将它们转换为短字符串,这些字符串可以用作测试的人读标识符,但在生产中可以是全长的随机数。
入门
将以下内容添加到您的 Cargo.toml
[dependencies.fuid]
version = "1.2.2"
features = ["serde"] # Optional: Enable Serde support
no_std
支持
fuid
支持 no_std
环境。在 no_std
环境中,将使用 alloc
crate。
[dependencies.fuid]
version = "1.2.2"
default-features = false # Disable default features
features = ["serde"] # Optional: Enable Serde support with no_std
用法
当您需要随机FUID时,可以生成一个
use fuid::Fuid;
for _ in 0..10 {
let id = Fuid::new();
println!("{}", id);
}
示例输出
2OgGZdF0XpQ7nuoC99CDxX
4YX6PmtlWBkhMEyyc6G7Oz
7ZxST7AIFUpG9EgnD9CgI7
4XCFe4KvZjQBfb4sH6Ybqd
5tmyQuvYZyJ6vOWCQLEqkB
3RcWxQsqs8mWIpn1RQIVJc
7MlBR5pJakurAhNRr4LwfZ
6WKpT00vD4BJ3vZpEdZaZw
4SxascPNNmBN1jFQYCtWpr
3k9FL4LZe71geQdbOyCvz3
您可以将短字符串转换为FUIDs,并将FUIDs转换回短字符串。FUID兼容的字符串可能包括数字和大写和小写英文字母。
use fuid::Fuid;
let s = "A";
let id = Fuid::from_str(s).unwrap(); // Not all strings are valid FUIDs.
let s2: String = id.into();
assert_eq!(s2, s);
let id2: Fuid = s.try_into().unwrap();
let s3: String = id2.into();
assert_eq!(s3, s);
您可以将无符号整数转换为FUIDs,并将FUIDs转换回无符号整数。
use fuid::Fuid;
let n: u128 = 10;
let id: Fuid = n.into();
let n2: u128 = id.into();
assert_eq!(n, n2);
您可以使用 fuid!
宏轻松地将字面量转换为FUIDs。
use fuid::fuid;
let a = fuid!("A");
assert_eq!(String::from(a), "A");
let b = fuid!(1);
assert_eq!(b.as_u128(), 1);
您可以将UUIDs转换为FUIDs,并将FUIDs转换回UUIDs。
use fuid::Fuid;
use uuid::Uuid;
let f = "3k9FL4LZe71geQdbOyCvz3";
let u = "7b06fb9f-cb59-4c6d-a38c-028d27193acd";
let fuid = Fuid::from_str(f).unwrap();
let uuid = Uuid::from_str(u).unwrap();
assert_eq!(fuid, uuid.into());
assert_eq!(uuid, fuid.into());
依赖关系
~210-395KB