Crates.io | nid |
lib.rs | nid |
version | 3.0.0 |
source | src |
created_at | 2024-04-02 11:39:03.761995 |
updated_at | 2024-04-14 09:41:28.672362 |
description | Generate and parse Nano IDs |
homepage | |
repository | https://github.com/ciffelia/nid |
max_upload_size | |
id | 1193420 |
size | 59,683 |
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 of Nanoid
. Implement serde::Serialize
and serde::Deserialize
for Nanoid
.zeroize
: Add support for zeroizing the memory of Nanoid
. Implement zeroize::Zeroize
for Nanoid
.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
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.