use super::types::Codes;
pub fn decode(codes: &Codes, string: &String) -> Vec<String> {
let string_len = string.chars().count();
if let Some(letter) = codes.get(string) {
let mut additional_letters = vec![];
for i in 1..=string_len {
if codes.get(&string[..i].to_string()).is_some() {
additional_letters.extend(decode(codes, &string[i..].to_string()));
}
}
let mut res = vec![letter.to_string()];
res.extend(additional_letters);
res
} else {
let mut decoded_strings: Vec<String> = vec![];
let mut buffer = String::new();
for i in 0..string_len {
buffer.push_str(&string.chars().nth(i).unwrap().to_string());
if let Some(letter) = codes.get(&buffer) {
for s in decode(codes, &string[i+1..].to_string()) {
decoded_strings.push(letter.clone() + &s);
}
}
}
decoded_strings
}
}