Generate and parse Nano IDs.
Nano ID is a small, secure, URL-friendly, unique string ID. Here's an example of a Nano ID:
qjH-6uGrFy0QgNJtUh0_c
This crate is a Rust implementation of the original Nano ID library written in JavaScript. Please refer to the original library for the detailed explanation of Nano ID.
Add the following to your Cargo.toml
:
[dependencies]
nid = "3.0.0"
When you want a new Nano ID, you can generate one using the Nanoid::new
method.
use nid::Nanoid;
let id: Nanoid = Nanoid::new();
You can parse a string into a Nano ID using Nanoid::try_from_str
, std::str::FromStr
or TryFrom<String>
.
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()?;
If the Nano ID string is constant, you can also use the nanoid
macro to parse it at compile time.
use nid::{nanoid, Nanoid};
let id = nanoid!("ClCrhcvy5kviH5ZozARfi");
const ID: Nanoid = nanoid!("9vZZWqFI_rTou3Mutq1LH");
The length of the Nano ID is 21 by default. You can change it by specifying the generic parameter.
use nid::Nanoid;
let id: Nanoid<10> = "j1-SOTHHxi".parse()?;
You can also use a different alphabet. The list of available alphabets is in the alphabet
module.
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
: Add support for serialization and deserialization ofNanoid
. Implementserde::Serialize
andserde::Deserialize
forNanoid
.zeroize
: Add support for zeroizing the memory ofNanoid
. Implementzeroize::Zeroize
forNanoid
.
nanoid
and nano-id
are other implementations of Nano ID in Rust.
The main difference between nid
and the other implementations is that nid
has Nanoid
type to represent Nano IDs.
This type provides a safe way to generate and parse Nano IDs.
This is similar to uuid
crate, which provides Uuid
type to represent UUIDs.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.