#![allow(dead_code)]
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
const ADJECTIVES: &[&str] = &[
"abundant",
"ancient",
"bright",
"calm",
"cheerful",
"clever",
"cozy",
"curious",
"dapper",
"dazzling",
"deep",
"delightful",
"eager",
"elegant",
"enchanted",
"fancy",
"fluffy",
"gentle",
"gleaming",
"golden",
"graceful",
"happy",
"hidden",
"humble",
"jolly",
"joyful",
"keen",
"kind",
"lively",
"lovely",
"lucky",
"luminous",
"magical",
"majestic",
"mellow",
"merry",
"mighty",
"misty",
"noble",
"peaceful",
"playful",
"polished",
"precious",
"proud",
"quiet",
"quirky",
"radiant",
"rosy",
"serene",
"shiny",
"silly",
"sleepy",
"smooth",
"snazzy",
"snug",
"snuggly",
"soft",
"sparkling",
"spicy",
"splendid",
"sprightly",
"starry",
"steady",
"sunny",
"swift",
"tender",
"tidy",
"toasty",
"tranquil",
"twinkly",
"valiant",
"vast",
"velvet",
"vivid",
"warm",
"whimsical",
"wild",
"wise",
"witty",
"wondrous",
"zany",
"zesty",
"zippy",
];
const NOUNS: &[&str] = &[
"aurora",
"avalanche",
"blossom",
"breeze",
"brook",
"bubble",
"canyon",
"cascade",
"cloud",
"clover",
"comet",
"coral",
"cosmos",
"creek",
"crescent",
"crystal",
"dawn",
"dewdrop",
"dusk",
"eclipse",
"ember",
"feather",
"fern",
"firefly",
"flame",
"flurry",
"fog",
"forest",
"frost",
"galaxy",
"garden",
"glacier",
"glade",
"grove",
"harbor",
"horizon",
"island",
"lagoon",
"lake",
"leaf",
"lightning",
"meadow",
"meteor",
"mist",
"moon",
"moonbeam",
"mountain",
"nebula",
"nova",
"ocean",
"orbit",
"pebble",
"petal",
"pine",
"planet",
"pond",
"puddle",
"quasar",
"rain",
"rainbow",
"reef",
"ripple",
"river",
"shore",
"sky",
"snowflake",
"spark",
"spring",
"star",
"stardust",
"starlight",
"storm",
"stream",
"summit",
"sun",
"sunbeam",
"sunrise",
"sunset",
"thunder",
"tide",
"twilight",
"valley",
"volcano",
"waterfall",
"wave",
"willow",
"wind",
];
const VERBS: &[&str] = &[
"baking",
"beaming",
"booping",
"bouncing",
"brewing",
"bubbling",
"chasing",
"churning",
"coalescing",
"conjuring",
"cooking",
"crafting",
"crunching",
"cuddling",
"dancing",
"dazzling",
"discovering",
"doodling",
"dreaming",
"drifting",
"enchanting",
"exploring",
"finding",
"floating",
"fluttering",
"foraging",
"forging",
"frolicking",
"gathering",
"giggling",
"gliding",
"greeting",
"growing",
"hatching",
"herding",
"honking",
"hopping",
"hugging",
"humming",
"imagining",
"inventing",
"jingling",
"juggling",
"jumping",
"kindling",
"knitting",
"launching",
"leaping",
"mapping",
"marinating",
"meandering",
"mixing",
"moseying",
"munching",
"napping",
"nibbling",
"noodling",
"orbiting",
"painting",
"percolating",
"petting",
"plotting",
"pondering",
"popping",
"prancing",
"purring",
"puzzling",
"questing",
"riding",
"roaming",
"rolling",
"sauteeing",
"scribbling",
"seeking",
"shimmying",
"singing",
"skipping",
"sleeping",
"snacking",
"sniffing",
"snuggling",
"soaring",
"sparking",
"spinning",
"splashing",
"sprouting",
"squishing",
"stargazing",
"stirring",
"strolling",
"swimming",
"swinging",
"tickling",
"tinkering",
"toasting",
"tumbling",
"twirling",
"waddling",
"wandering",
"watching",
"weaving",
"whistling",
"wibbling",
"wiggling",
"wishing",
"wobbling",
"wondering",
"yawning",
"zooming",
];
fn random_int(max: usize) -> usize {
let mut hasher = DefaultHasher::new();
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_nanos()
.hash(&mut hasher);
(hasher.finish() as usize) % max
}
fn pick_random<T: Clone>(array: &[T]) -> T {
array[random_int(array.len())].clone()
}
pub fn generate_word_slug() -> String {
let adjective = pick_random(ADJECTIVES);
let verb = pick_random(VERBS);
let noun = pick_random(NOUNS);
format!("{}-{}-{}", adjective, verb, noun)
}
pub fn generate_short_word_slug() -> String {
let adjective = pick_random(ADJECTIVES);
let noun = pick_random(NOUNS);
format!("{}-{}", adjective, noun)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_generate_word_slug() {
let slug = generate_word_slug();
let parts: Vec<&str> = slug.split('-').collect();
assert_eq!(parts.len(), 3);
}
#[test]
fn test_generate_short_word_slug() {
let slug = generate_short_word_slug();
let parts: Vec<&str> = slug.split('-').collect();
assert_eq!(parts.len(), 2);
}
}