enigma/reflector/
from_args.rs1use crate::enigma_int::ToEnigmaInt;
2
3use super::Reflector;
4
5impl Reflector {
6 pub fn from_args(argument: &String) -> Reflector {
7 let pairs = argument.split_whitespace();
8 if pairs.clone().count() != 13 {
9 panic!("Reflector must have 13 pairs of letters.\n --reflector \"PAIRS\"");
10 }
11
12 let mut wiring = [0; 26];
13
14 for pair in pairs {
15 let mut chars = pair.chars();
16 let first = chars.next().unwrap();
17 let second = chars.next().unwrap();
18
19 if !first.is_ascii_alphabetic() || !second.is_ascii_alphabetic() {
20 panic!("{} is invalid. Reflector pairs must be letters.", pair);
21 }
22
23 let first_int = first.to_internal_int();
24 let second_int = second.to_internal_int();
25
26 if wiring[first_int] != 0 || wiring[second_int] != 0 || first_int == second_int {
27 panic!("Reflector pairs must not have duplicate letters.");
28 }
29
30 wiring[first_int] = second_int;
31 wiring[second_int] = first_int;
32 }
33
34 Reflector { wiring }
35 }
36}