4 stable releases
new 1.0.3 | May 20, 2025 |
---|---|
1.0.1 | May 19, 2025 |
#619 in Text processing
76 downloads per month
27KB
403 lines
vds
Visibly Distinguishable Strings โ a #![no_std]
Rust crate for creating and validating string identifiers composed of easily readable characters.
This crate helps you generate and work with strings that:
- Exclude confusing glyphs like
O
,0
,I
,1
- Use only uppercase Latin letters and select digits
- Are safe for UI display, voice transmission, QR encoding, and more
๐ Getting Started
Install via Cargo:
cargo add vds
Enable optional features:
serde
โ enablesSerialize
/Deserialize
forVDChar
andVDString
generate
โ adds a builder for random string generation usingrand_core
[dependencies]
vds = { version = "1.0", features = ["generate", "serde"] }
๐ฏ Types
VDChar
A single, clearly readable character from a curated set.
use vds::VDChar;
assert!(VDChar::new('A').is_some());
assert!(VDChar::new('O').is_none()); // O is excluded
VDString
A validated string composed of VDChar
s. Acts like &str
and supports .parse()
, indexing, and iteration.
use vds::VDString;
let code: VDString = "AB29XY".parse().unwrap();
assert_eq!(&*code, "AB29XY");
VDGenerator
(requires generate
feature)
A builder for generating readable strings with optional constraints:
use vds::VDGenerator;
use rand::SeedableRng;
let mut rng = rand::rngs::SmallRng::seed_from_u64(123);
let code = VDGenerator::new()
.length(8)
.no_repeats()
.no_adjacent_repeats()
.generate(&mut rng)
.unwrap();
๐งช Development & Testing
๐ Dev Commands
This repo includes a .cargo/config.toml
file with helpful aliases:
cargo docs
โ build and open full-featured docscargo tests
โ run the full test suite with all featurescargo checks
โ check build with no default featurescargo builds
โ build with all features enabled
๐ฆ Crate Metadata
- License: MIT OR Apache-2.0
- Repo: github.com/ianwillis98/vds
- Minimum Rust: 1.65
- No
std
required
๐ License
Licensed under either of:
- MIT OR Apache-2.0
Dependencies
~170KB