enigma/
lib.rs

1mod enigma;
2mod enigma_int;
3mod plugboard;
4mod reflector;
5mod rotor;
6
7pub use enigma::Enigma;
8pub use reflector::Reflector;
9pub use rotor::Rotor;
10
11use crate::plugboard::Plugboard;
12
13pub struct EnigmaBuilder {
14    pub rotors: Vec<Rotor>,
15    pub reflector: Option<Reflector>,
16    pub plugboard: Option<Plugboard>,
17}
18
19impl EnigmaBuilder {
20    pub fn new() -> EnigmaBuilder {
21        EnigmaBuilder {
22            rotors: Vec::new(),
23            reflector: None,
24            plugboard: None,
25        }
26    }
27}
28
29impl Default for EnigmaBuilder {
30    fn default() -> Self {
31        Self::new()
32    }
33}
34
35impl EnigmaBuilder {
36    pub fn build(self) -> Enigma {
37        Enigma {
38            rotors: self.rotors,
39            reflector: self.reflector.expect("Reflector is required"),
40            plugboard: self.plugboard,
41        }
42    }
43}