use crate::checkers::athena::Athena;
use crate::checkers::checker_type::{Check, Checker};
use crate::checkers::CheckerTypes;
use crate::filtration_system::{filter_and_get_decoders, MyResults};
use crate::DecoderResult;
mod bfs;
pub fn search_for_plaintext(input: &str) -> Option<DecoderResult> {
bfs::bfs(input)
}
fn perform_decoding(text: &DecoderResult) -> MyResults {
let decoders = filter_and_get_decoders(text);
let athena_checker = Checker::<Athena>::new();
let checker = CheckerTypes::CheckAthena(athena_checker);
decoders.run(&text.text[0], checker)
}
#[cfg(test)]
mod tests {
use super::*;
fn exit_condition(input: &str) -> bool {
let athena_checker = Checker::<Athena>::new();
let checker = CheckerTypes::CheckAthena(athena_checker);
checker.check(input).is_identified
}
#[test]
fn exit_condition_succeeds() {
let result = exit_condition("https://www.google.com");
assert!(result);
}
#[test]
fn exit_condition_fails() {
let result = exit_condition("vjkrerkdnxhrfjekfdjexk");
assert!(!result);
}
#[test]
fn perform_decoding_succeeds() {
let dc = DecoderResult::_new("aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbQ==");
let result = perform_decoding(&dc);
assert!(
result
._break_value()
.expect("expected successful value, none found")
.success
);
}
#[test]
fn perform_decoding_succeeds_empty_string() {
let dc = DecoderResult::_new("");
let result = perform_decoding(&dc);
assert!(result._break_value().is_none());
}
}