created_at2024-04-02 11:39:03.761995
updated_at2024-04-14 09:41:28.672362
descriptionGenerate and parse Nano IDs



# nid [![CI status][ci badge]][ci link] [![][ badge]][ link] [![docs][docs badge]][docs link] [![Apache 2.0 or MIT Licenses][license badge]][license link] 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. ## Getting started Add the following to your `Cargo.toml`: ```toml [dependencies] nid = "3.0.0" ``` When you want a new Nano ID, you can generate one using the [`Nanoid::new`] method. ```rust 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`]. ```rust 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. ```rust 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. ```rust 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. ```rust use nid::{alphabet::Base62Alphabet, Nanoid}; let id: Nanoid<10, Base62Alphabet> = Nanoid::new(); ``` ## Examples ```rust 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()?; ``` ## Features - `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`]. ## Comparison with other implementations of Nano ID [`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. [`Nanoid::new`]: [`Nanoid::try_from_str`]: [`std::str::FromStr`]: [`TryFrom`]: [`nanoid`]: [`alphabet`]: [`Nanoid`]: [`serde::Serialize`]: [`serde::Deserialize`]: [`zeroize::Zeroize`]: ## License Licensed under either of * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or * MIT license ([LICENSE-MIT](LICENSE-MIT) or at your option. ## Contribution 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. [ci badge]: [ci link]: [ badge]: [ link]: [docs badge]: [docs link]: [license badge]: [license link]: #license
Commit count: 74

cargo fmt