use engish::language::{Adjective, Dictionary, DictionarySampling, DictionaryStack, Noun, Verb};
use rand::rng;
fn main() {
let mut base_dict = Dictionary::new();
base_dict.add_word(Noun::new_common("man"));
base_dict.add_word(Verb::new_regular("walk"));
println!(
"Created a base dictionary with {} nouns and {} verbs.",
base_dict.get_all::<Noun>().len(),
base_dict.get_all::<Verb>().len()
);
let mut fantasy_dict = Dictionary::new();
fantasy_dict.add_word(Noun::new_proper("Gandalf"));
fantasy_dict.add_word(Adjective::new_regular("magical"));
println!(
"Created a fantasy-specific dictionary with {} nouns and {} adjectives.\n",
fantasy_dict.get_all::<Noun>().len(),
fantasy_dict.get_all::<Adjective>().len()
);
let dictionary_stack = DictionaryStack::from(vec![fantasy_dict.clone(), base_dict]);
println!("--- Created DictionaryStack (fantasy > base) ---\n");
let mut rng = rng();
println!("--- Sampling from fantasty dictionary ---");
sample_words(fantasy_dict, &mut rng); println!("--- Sampling from dictionary set ---");
sample_words(dictionary_stack, &mut rng);
}
fn sample_words(dictionary: impl DictionarySampling, rng: &mut impl rand::Rng) {
if let Some(noun) = dictionary.choose::<Noun>(rng) {
println!(
"Randomly selected noun: {} (from the dictionary)",
noun
);
} else {
println!("No nouns found in the dictionary.");
}
if let Some(verb) = dictionary.choose::<Verb>(rng) {
println!(
"Randomly selected verb: {} (from the dictionary)",
verb
);
} else {
println!("No verbs found in the dictionary.");
}
if let Some(adjective) = dictionary.choose::<Adjective>(rng) {
println!(
"Randomly selected adjective: {} (from the dictionary)",
adjective
);
} else {
println!("No adjectives found in the dictionary.");
}
}