pub fn encrypt(message: &str, shift: u8) -> String {
message
.chars()
.map(|c| {
if c.is_ascii_alphabetic() {
let base = if c.is_ascii_lowercase() { b'a' } else { b'A' };
((c as u8 - base + shift) % 26 + base) as char
} else {
c
}
})
.collect()
}
pub fn decrypt(message: &str, shift: u8) -> String {
encrypt(message, 26 - shift) }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_encrypt() {
assert_eq!(encrypt("Hello, Rust!", 3), "Khoor, Uxvw!");
}
#[test]
fn test_decrypt() {
assert_eq!(decrypt("Khoor, Uxvw!", 3), "Hello, Rust!");
}
}