memorable_ids/
dictionary.rs

1//! Dictionary of words for memorable ID generation
2//!
3//! Contains collections of English words categorized by part of speech.
4//! Used to generate human-readable, memorable identifiers.
5//!
6//! @author Aris Ripandi
7//! @license MIT
8
9/// English adjectives (78 total)
10/// Descriptive words that modify nouns
11pub const ADJECTIVES: &[&str] = &[
12    "cute",
13    "dapper",
14    "large",
15    "small",
16    "long",
17    "short",
18    "thick",
19    "narrow",
20    "deep",
21    "flat",
22    "whole",
23    "low",
24    "high",
25    "near",
26    "far",
27    "fast",
28    "quick",
29    "slow",
30    "early",
31    "late",
32    "bright",
33    "dark",
34    "cloudy",
35    "warm",
36    "cool",
37    "cold",
38    "windy",
39    "noisy",
40    "loud",
41    "quiet",
42    "dry",
43    "clear",
44    "hard",
45    "soft",
46    "heavy",
47    "light",
48    "strong",
49    "weak",
50    "tidy",
51    "clean",
52    "dirty",
53    "empty",
54    "full",
55    "close",
56    "thirsty",
57    "hungry",
58    "fat",
59    "old",
60    "fresh",
61    "dead",
62    "healthy",
63    "sweet",
64    "sour",
65    "bitter",
66    "salty",
67    "good",
68    "bad",
69    "great",
70    "important",
71    "useful",
72    "expensive",
73    "cheap",
74    "free",
75    "difficult",
76    "able",
77    "rich",
78    "afraid",
79    "brave",
80    "fine",
81    "sad",
82    "proud",
83    "comfortable",
84    "happy",
85    "clever",
86    "interesting",
87    "famous",
88    "exciting",
89    "funny",
90    "kind",
91    "polite",
92    "fair",
93    "busy",
94    "lazy",
95    "lucky",
96    "careful",
97    "safe",
98    "dangerous",
99];
100
101/// English nouns - animals and common objects (68 total)
102/// Concrete things, animals, and objects
103pub const NOUNS: &[&str] = &[
104    "rabbit",
105    "badger",
106    "fox",
107    "chicken",
108    "bat",
109    "deer",
110    "snake",
111    "hare",
112    "hedgehog",
113    "platypus",
114    "mole",
115    "mouse",
116    "otter",
117    "rat",
118    "squirrel",
119    "stoat",
120    "weasel",
121    "crow",
122    "dove",
123    "duck",
124    "goose",
125    "hawk",
126    "heron",
127    "kingfisher",
128    "owl",
129    "peacock",
130    "pheasant",
131    "pigeon",
132    "robin",
133    "rook",
134    "sparrow",
135    "starling",
136    "swan",
137    "ant",
138    "bee",
139    "butterfly",
140    "dragonfly",
141    "fly",
142    "moth",
143    "spider",
144    "pike",
145    "salmon",
146    "trout",
147    "frog",
148    "newt",
149    "toad",
150    "crab",
151    "lobster",
152    "clam",
153    "cockle",
154    "mussel",
155    "oyster",
156    "snail",
157    "cow",
158    "dog",
159    "donkey",
160    "goat",
161    "horse",
162    "pig",
163    "sheep",
164    "ferret",
165    "gerbil",
166    "guinea-pig",
167    "parrot",
168    "book",
169    "table",
170    "chair",
171    "lamp",
172    "phone",
173    "computer",
174    "window",
175    "door",
176];
177
178/// English verbs - present tense (40 total)
179/// Action words in present tense form
180pub const VERBS: &[&str] = &[
181    "sing", "play", "knit", "flounder", "dance", "listen", "run", "talk",
182    "cuddle", "sit", "kiss", "hug", "whimper", "hide", "fight", "whisper",
183    "cry", "snuggle", "walk", "drive", "loiter", "feel", "jump", "hop", "go",
184    "marry", "engage", "sleep", "eat", "drink", "read", "write", "swim", "fly",
185    "climb", "build", "create", "explore", "discover", "learn",
186];
187
188/// English adverbs (27 total)
189/// Words that modify verbs, adjectives, or other adverbs
190pub const ADVERBS: &[&str] = &[
191    "jovially",
192    "merrily",
193    "cordially",
194    "carefully",
195    "correctly",
196    "eagerly",
197    "easily",
198    "fast",
199    "loudly",
200    "patiently",
201    "quickly",
202    "quietly",
203    "slowly",
204    "gently",
205    "firmly",
206    "softly",
207    "boldly",
208    "bravely",
209    "calmly",
210    "clearly",
211    "closely",
212    "deeply",
213    "directly",
214    "exactly",
215    "fairly",
216    "freely",
217    "fully",
218];
219
220/// English prepositions (26 total)
221/// Words that show relationships between other words
222pub const PREPOSITIONS: &[&str] = &[
223    "in", "on", "at", "by", "for", "with", "from", "to", "of", "about",
224    "under", "over", "through", "between", "among", "during", "before",
225    "after", "above", "below", "beside", "behind", "beyond", "within",
226    "without", "across",
227];
228
229/// Dictionary statistics for combination calculations
230#[derive(Debug, Clone, Copy)]
231pub struct DictionaryStats {
232    pub adjectives: usize,
233    pub nouns: usize,
234    pub verbs: usize,
235    pub adverbs: usize,
236    pub prepositions: usize,
237}
238
239impl DictionaryStats {
240    /// Get dictionary statistics
241    pub const fn new() -> Self {
242        Self {
243            adjectives: ADJECTIVES.len(),
244            nouns: NOUNS.len(),
245            verbs: VERBS.len(),
246            adverbs: ADVERBS.len(),
247            prepositions: PREPOSITIONS.len(),
248        }
249    }
250}
251
252/// All word collections grouped by type
253#[derive(Debug, Clone)]
254pub struct Dictionary {
255    pub adjectives: &'static [&'static str],
256    pub nouns: &'static [&'static str],
257    pub verbs: &'static [&'static str],
258    pub adverbs: &'static [&'static str],
259    pub prepositions: &'static [&'static str],
260    pub stats: DictionaryStats,
261}
262
263impl Dictionary {
264    /// Create a new dictionary instance
265    pub const fn new() -> Self {
266        Self {
267            adjectives: ADJECTIVES,
268            nouns: NOUNS,
269            verbs: VERBS,
270            adverbs: ADVERBS,
271            prepositions: PREPOSITIONS,
272            stats: DictionaryStats::new(),
273        }
274    }
275}
276
277impl Default for Dictionary {
278    fn default() -> Self {
279        Self::new()
280    }
281}
282
283/// Get the default dictionary instance
284pub const fn get_dictionary() -> Dictionary {
285    Dictionary::new()
286}
287
288/// Get dictionary statistics
289pub const fn get_dictionary_stats() -> DictionaryStats {
290    DictionaryStats::new()
291}