vds 1.0.1

Visibly distinguishable string types for identifiers and codes.
# 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:

```sh
cargo add vds
```

Enable optional features:

- `serde` โ€” enables `Serialize`/`Deserialize` for `VDChar` and `VDString`
- `generate` โ€” adds a builder for random string generation using `rand_core`

```toml
[dependencies]
vds = { version = "1.0", features = ["generate", "serde"] }
```

---

## ๐ŸŽฏ Types


### `VDChar`


A single, clearly readable character from a curated set.

```rust
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.

```rust
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:

```rust
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 docs
- `cargo tests` โ€” run the full test suite with all features
- `cargo checks` โ€” check build with no default features
- `cargo builds` โ€” build with all features enabled

## ๐Ÿ“ฆ Crate Metadata


- License: MIT OR Apache-2.0
- Repo: [github.com/ianwillis98/vds]https://github.com/ianwillis98/vds
- Minimum Rust: 1.65
- No `std` required

---

## ๐Ÿ“œ License


Licensed under either of:

- MIT OR Apache-2.0