enigma-cli 1.0.0

A command-line interface for an Enigma machine simulator. Configurable with any reflector, number of rotors, and plugboard pairs.
Documentation
use crate::enigma_int::ToEnigmaInt;

use super::Reflector;

impl Reflector {
    pub fn from_args(argument: &String) -> Reflector {
        let pairs = argument.split_whitespace();
        if pairs.clone().count() != 13 {
            panic!("Reflector must have 13 pairs of letters.\n --reflector \"PAIRS\"");
        }

        let mut wiring = [0; 26];

        for pair in pairs {
            let mut chars = pair.chars();
            let first = chars.next().unwrap();
            let second = chars.next().unwrap();

            if !first.is_ascii_alphabetic() || !second.is_ascii_alphabetic() {
                panic!("{} is invalid. Reflector pairs must be letters.", pair);
            }

            let first_int = first.to_internal_int();
            let second_int = second.to_internal_int();

            if wiring[first_int] != 0 || wiring[second_int] != 0 || first_int == second_int {
                panic!("Reflector pairs must not have duplicate letters.");
            }

            wiring[first_int] = second_int;
            wiring[second_int] = first_int;
        }

        Reflector { wiring }
    }
}