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}