Sqids Rust

Latest version Github Actions Docs Downloads

Sqids (pronounced "squids") is a small library that lets you generate unique IDs from numbers. It's good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.

Features:

🧰 Use-cases

Good for:

Not good for:

🚀 Getting started

Add using cargo:

bash cargo add sqids

👩‍💻 Examples

Simple encode & decode:

rust let sqids = Sqids::default(); let id = sqids.encode(&[1, 2, 3])?; // "8QRLaD" let numbers = sqids.decode(&id); // [1, 2, 3]

Note 🚧 Because of the algorithm's design, multiple IDs can decode back into the same sequence of numbers. If it's important to your design that IDs are canonical, you have to manually re-encode decoded numbers and check that the generated ID matches.

Randomize IDs by providing a custom alphabet:

rust let sqids = Sqids::new(Some(Options::new( Some("FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE".to_string()), None, None, )))?; let id = sqids.encode(&[1, 2, 3])?; // "B5aMa3" let numbers = sqids.decode(&id); // [1, 2, 3]

Enforce a minimum length for IDs:

rust let sqids = Sqids::new(Some(Options::new( None, Some(10), None, )))?; let id = sqids.encode(&[1, 2, 3])?; // "75JT1cd0dL" let numbers = sqids.decode(&id); // [1, 2, 3]

Prevent specific words from appearing anywhere in the auto-generated IDs:

rust let sqids = Sqids::new(Some(Options::new( None, None, Some(HashSet::from(["word1".to_string(), "word2".to_string()])), )))?; let id = sqids.encode(&[1, 2, 3])?; // "8QRLaD" let numbers = sqids.decode(&id); // [1, 2, 3]

📝 License

MIT