9个版本 (3个重大变更)
3.0.0 | 2024年4月14日 |
---|---|
2.1.0 | 2024年4月14日 |
2.0.0 | 2024年4月4日 |
1.0.0 | 2024年4月2日 |
0.1.0 | 2024年4月2日 |
672 在 解析实现
每月128次下载
用于 tower-request-id-nano
47KB
623 行
nid
生成和解析Nano ID。
Nano ID是一个小、安全、URL友好的唯一字符串ID。以下是一个Nano ID的示例
qjH-6uGrFy0QgNJtUh0_c
这个crate是使用JavaScript编写的原始Nano ID库的Rust实现。请参考原始库以获取关于Nano ID的详细说明。
入门指南
将以下内容添加到您的Cargo.toml
[dependencies]
nid = "3.0.0"
当您需要一个新的Nano ID时,可以使用Nanoid::new
方法生成。
use nid::Nanoid;
let id: Nanoid = Nanoid::new();
您可以使用Nanoid::try_from_str
、std::str::FromStr
或TryFrom<String>
将字符串解析为Nano ID。
use nid::Nanoid;
let id: Nanoid = Nanoid::try_from_str("K8N4Q7MNmeHJ-OHHoVDcz")?;
let id: Nanoid = "3hYR3muA_xvjMrrrqFWxF".parse()?;
let id: Nanoid = "iH26rJ8CpRz-gfIh7TSRu".to_string().try_into()?;
如果Nano ID字符串是常量,您还可以使用nanoid
宏在编译时解析它。
use nid::{nanoid, Nanoid};
let id = nanoid!("ClCrhcvy5kviH5ZozARfi");
const ID: Nanoid = nanoid!("9vZZWqFI_rTou3Mutq1LH");
Nano ID的长度默认为21。您可以通过指定泛型参数来更改它。
use nid::Nanoid;
let id: Nanoid<10> = "j1-SOTHHxi".parse()?;
您还可以使用不同的字母表。可用字母表列表在alphabet
模块中。
use nid::{alphabet::Base62Alphabet, Nanoid};
let id: Nanoid<10, Base62Alphabet> = Nanoid::new();
示例
use nid::{alphabet::Base62Alphabet, Nanoid};
// Generate a new Nano ID and print it.
let id: Nanoid = Nanoid::new();
println!("{}", id);
// Parse a string into a Nano ID and convert it back to a string.
let id: Nanoid = "abcdefg1234567UVWXYZ_".parse()?;
let s = id.to_string();
// Parse a string into a Nano ID with a different length and alphabet.
let id: Nanoid<9, Base62Alphabet> = "abc123XYZ".parse()?;
功能
serde
:添加对Nanoid
序列化和反序列化的支持。为Nanoid
实现serde::Serialize
和serde::Deserialize
。zeroize
:增加对Nanoid
内存零化的支持。为zeroize::Zeroize
实现Nanoid
。
与其他Nano ID实现的比较
nanoid
和nano-id
是Rust中其他Nano ID的实现。与nid
的其他实现相比,主要区别在于nid
有一个Nanoid
类型来表示Nano IDs。此类型提供了一种安全生成和解析Nano IDs的方法。这与提供uuid
类型的Uuid
的crate相似,它提供了表示UUIDs的方法。
许可证
根据您选择的以下之一获得许可:
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何旨在包含在作品中的贡献,均应按照上述方式双许可,不附加任何额外的条款或条件。
依赖
~0.5–1.1MB
~23K SLoC