3 个版本 (破坏性更新)
0.3.0 | 2023 年 1 月 30 日 |
---|---|
0.2.0 | 2023 年 1 月 29 日 |
0.1.0 | 2023 年 1 月 15 日 |
#1566 在 网页编程
20KB
187 行
randoid
Rust nanoid 实现
这是 nanoid
的 Rust 实现。
它生成比 UUID 更紧凑的唯一 ID 字符串。
默认情况下,它从 64 个符号(a-z,A-Z,0-9,"_" 和 "-")的字母表中生成 21 个字符的字符串。
特性
此 nanoid 实现具有以下特性(其中许多与 nanoid
crate 不同)
- 无 std 支持
- 无需分配即可使用(通过直接写入输出字符)
- 允许使用任何
Rng
实现作为随机数据源。 - 实现针对字母表大小为 2 的幂进行了优化
smartstring
支持,如果启用了smarstring
功能(作为附加功能)
限制
- 需要在编译时知道字母表的大小(这样做的主要原因是有助于编译器更好地优化它)
- 字母表的大小必须是 2 的幂
- 泛型使用可能会增加编译时间
如果您想要一个更通用的字母表,该字母表的大小不是 2 的幂且/或事先不知道,那么 rand::distributions::Slice
可能足够。例如
use rand::{Rng, distributions::Slice, thread_rng};
let alphabet = ['1', '2', '3', '4', '5', '6', '7', '9', '0', 'a', 'b', 'c'];
let id: String = thread_rng().sample_iter(&Slice::new(&alphabet).unwrap()).take(21).collect();
功能标志
alloc
:需要使用alloc
crate,并允许创建一个作为String
std
:使用完整的std
库std-rand
:包含rand/std
和rand/std_rng
功能,并添加对使用thread_rng()
作为默认随机数据源的支持。smartstring
:添加一个创建 ID 作为SmartString
的函数
用法
安装
[dependencies]
randoid = "0.3.0"
简单
use randoid::{randoid, Generator};
// All of the below generate a string like "9wxwPU-kQU-RDjYdxj6Eq"
let id = randoid();
let id = randoid!();
let id = Generator::default().gen();
自定义长度
use randoid::{randoid, Generator};
// The below generate a string like "M_P_lJcWfI"
let id = randoid!(10);
let id = Generator::with_size(10).gen();
自定义字母表
use randoid::{randoid, Generator};
let id = randoid!(21, ['a', 'b', 'c', 'd']);
let id = Generator::with_alphabet(&randoid::alphabet::HEX).gen();
自定义随机数生成器
use randoid::{randoid, Generator};
use rand::rngs::OsRng;
let id = randoid!(21, &randoid::alphabet::DEFAULT, OsRng);
let id = Generator::with_random(OsRng).gen();
关于名称
"nanoid" 已被一个类似库占用。我考虑了像 "nano-id" 或 "nanoid2" 这样的名称,但认为它们太相似了。由于 ID 是随机生成的,我决定使用 "randoid" 作为 "RANDOm ID" 的缩写。
致谢
当然是最初的 nanoid。
此外,https://github.com/nikolay-govorov/nanoid,作为本项目灵感的来源。
依赖关系
约 240-335KB