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

MIT 许可证

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