pub fn decode(encoded: &str, key: &str) -> Option<String> {
if key.is_empty() { return None; }
let mut decoded_chars: Vec<char> = encoded.chars()
.rev()
.enumerate()
.map(|(i, c)| {
let shift = key.chars().nth(i % key.len()).unwrap_or('a') as u8;
((c as u8).wrapping_sub(shift)) as char
})
.collect();
Some(decoded_chars.into_iter().collect())
}