#[derive(Default, Debug)]
#[allow(dead_code)]
pub enum Language {
#[default] ITA,
ENG,
ESP,
GER,
FRE,
}
#[derive(Default, Debug)]
#[allow(dead_code)]
pub struct RandomWord {
language: Language,
word: String,
meaning: String,
}
impl RandomWord {
pub fn new(language: Language) -> RandomWord {
RandomWord {
language,
..Default::default()
}
}
pub fn set_word(&mut self, word: &str) {
self.word = String::from(word);
}
pub fn get_word(&mut self) -> &str {
&self.word
}
pub fn set_meaning(&mut self, meaning: &str) {
self.meaning = String::from(meaning);
}
}
pub fn get_random_word(ln: Language) -> RandomWord {
match ln {
Language::ITA => get_word(RandomWord::new(Language::ITA), "https://www.palabrasaleatorias.com/parole-casuali.php?fs=1&fs2=0&Submit=Nuova+parola", "td>div"),
Language::ESP => get_word(RandomWord::new(Language::ESP), "https://www.danielpinero.com/generatore-parola-casuale-spagnolo", r#"body > div.archives.post.post1 > div > div.row > div.col-md-6.col-lg-8 > div.shadow6 > div:nth-child(2) > span > b"#),
Language::ENG => get_eng_word(RandomWord::new(Language::ENG)),
Language::GER => get_word(RandomWord::new(Language::GER), "https://www.coolgenerator.com/random-german-words-generator", r#"#main > div > div > div.col-md-9 > div:nth-child(2) > ul > li:nth-child(1) > p.text-center.font-18 > b > span"#),
Language::FRE => get_word(RandomWord::new(Language::FRE), "https://www.coolgenerator.com/random-french-words-generator", r#"#main > div > div > div.col-md-9 > div:nth-child(2) > ul > li:nth-child(1) > p.text-center.font-18 > b > span"#),
}
}
fn get_word(mut rw: RandomWord, url: &str, selector: &str) -> RandomWord {
let response = reqwest::blocking::get(url,)
.unwrap()
.text()
.unwrap();
let document = scraper::Html::parse_document(&response);
let selector = scraper::Selector::parse(selector).unwrap();
let mut inner_html_element = document.select(&selector).map(|x| x.inner_html());
let mut word = inner_html_element.next().unwrap().trim().to_lowercase();
word = format_word(word);
rw.set_word(&word.trim());
rw.set_meaning("_");
return rw;
}
fn get_eng_word(mut rw: RandomWord) -> RandomWord {
let word = random_word::gen();
rw.set_word(&word);
return rw;
}
fn format_word(word: String) -> String {
let mut chunks: Vec<String> = vec!(word.split(",").collect());
let mut result = &chunks[0];
chunks = vec!(result.split(" ").collect());
if chunks.len() > 1 {
result = &chunks[1];
} else {
result = &chunks[0];
}
chunks = vec!(result.split("-").collect());
result = &chunks[0];
String::from(result)
}