# Dictionary

Provides curated word and name lists for crate name generation. The crate exposes iterators for length-aware traversal so callers can scan candidates in deterministic order without runtime file I/O.

The embedded data ships with the 20k Google English word set (MIT-licensed) plus a handful of short proper names. Entries are trimmed, deduplicated, cached once, and sorted by length then lexicographic order to keep lookups predictable and fast.

## Usage

```rust
use name_dictionary::{by_length, iter_names, iter_ordered, iter_words};

let short_words: Vec<&'static str> = by_length(4).collect();
println!("4-letter words: {short_words:?}");

let names: Vec<&'static str> = iter_names(4, 5).collect();
println!("names: {names:?}");

let ordered: Vec<&'static str> = iter_ordered(3, 4).collect();
println!("ordered scan: {ordered:?}");

let only_words: Vec<&'static str> = iter_words(3, 4).collect();
println!("word-only scan: {only_words:?}");
```

## API

- `by_length(len: usize) -> impl Iterator<Item = &'static str>` returns words of the requested length sorted lexicographically.
- `iter_ordered(min_len: usize, max_len: usize) -> impl Iterator<Item = &'static str>` walks through all words grouped by length from `min_len` to `max_len`, lexicographically within each length.
- `iter_words(min_len: usize, max_len: usize)` and `iter_names(min_len: usize, max_len: usize)` return ordered subsets for words or names only.

Data is embedded at compile time via `include_str!` to keep lookups cheap and portable. If `min_len` exceeds `max_len`, the iterators yield no entries.
