3 个版本 (破坏性更新)

0.3.0 2023 年 1 月 30 日
0.2.0 2023 年 1 月 29 日
0.1.0 2023 年 1 月 15 日

#1566网页编程

MIT/Apache

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/stdrand/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