use self::{
athena::Athena,
checker_result::CheckResult,
checker_type::{Check, Checker},
english::EnglishChecker,
lemmeknow_checker::LemmeKnow,
password::PasswordChecker,
regex_checker::RegexChecker,
wait_athena::WaitAthena,
wordlist::WordlistChecker,
};
use gibberish_or_not::Sensitivity;
pub mod athena;
pub mod checker_result;
pub mod checker_type;
pub mod default_checker;
pub mod english;
pub mod human_checker;
pub mod lemmeknow_checker;
pub mod password;
pub mod regex_checker;
pub mod wait_athena;
pub mod wordlist;
pub enum CheckerTypes {
CheckLemmeKnow(Checker<LemmeKnow>),
CheckEnglish(Checker<EnglishChecker>),
CheckAthena(Checker<Athena>),
CheckWaitAthena(Checker<WaitAthena>),
CheckRegex(Checker<RegexChecker>),
CheckPassword(Checker<PasswordChecker>),
CheckWordlist(Checker<WordlistChecker>),
}
impl CheckerTypes {
pub fn check(&self, text: &str) -> CheckResult {
match self {
CheckerTypes::CheckLemmeKnow(lemmeknow_checker) => lemmeknow_checker.check(text),
CheckerTypes::CheckEnglish(english_checker) => english_checker.check(text),
CheckerTypes::CheckAthena(athena_checker) => athena_checker.check(text),
CheckerTypes::CheckWaitAthena(wait_athena_checker) => wait_athena_checker.check(text),
CheckerTypes::CheckRegex(regex_checker) => regex_checker.check(text),
CheckerTypes::CheckPassword(password_checker) => password_checker.check(text),
CheckerTypes::CheckWordlist(wordlist_checker) => wordlist_checker.check(text),
}
}
pub fn with_sensitivity(&self, sensitivity: Sensitivity) -> Self {
match self {
CheckerTypes::CheckLemmeKnow(_checker) => {
let mut new_checker = Checker::<LemmeKnow>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckLemmeKnow(new_checker)
}
CheckerTypes::CheckEnglish(_checker) => {
let mut new_checker = Checker::<EnglishChecker>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckEnglish(new_checker)
}
CheckerTypes::CheckAthena(_checker) => {
let mut new_checker = Checker::<Athena>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckAthena(new_checker)
}
CheckerTypes::CheckWaitAthena(_checker) => {
let mut new_checker = Checker::<WaitAthena>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckWaitAthena(new_checker)
}
CheckerTypes::CheckRegex(_checker) => {
let mut new_checker = Checker::<RegexChecker>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckRegex(new_checker)
}
CheckerTypes::CheckPassword(_checker) => {
let mut new_checker = Checker::<PasswordChecker>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckPassword(new_checker)
}
CheckerTypes::CheckWordlist(_checker) => {
let mut new_checker = Checker::<WordlistChecker>::new();
new_checker.sensitivity = sensitivity;
CheckerTypes::CheckWordlist(new_checker)
}
}
}
pub fn get_sensitivity(&self) -> Sensitivity {
match self {
CheckerTypes::CheckLemmeKnow(checker) => checker.get_sensitivity(),
CheckerTypes::CheckEnglish(checker) => checker.get_sensitivity(),
CheckerTypes::CheckAthena(checker) => checker.get_sensitivity(),
CheckerTypes::CheckWaitAthena(checker) => checker.get_sensitivity(),
CheckerTypes::CheckRegex(checker) => checker.get_sensitivity(),
CheckerTypes::CheckPassword(checker) => checker.get_sensitivity(),
CheckerTypes::CheckWordlist(checker) => checker.get_sensitivity(),
}
}
}
#[cfg(test)]
mod tests {
use crate::checkers::{
athena::Athena,
checker_type::{Check, Checker},
CheckerTypes,
};
#[test]
fn test_check_ip_address() {
let athena = CheckerTypes::CheckAthena(Checker::<Athena>::new());
assert!(athena.check("test valid english sentence").is_identified);
}
#[test]
fn test_check_goes_to_dictionary() {
let athena = CheckerTypes::CheckAthena(Checker::<Athena>::new());
assert!(athena.check("and").is_identified);
}
}