dice_roller/
runner.rs

1use super::dice::{RollResult, Roller};
2
3pub struct Runner {
4    definition: String,
5    roller: Roller,
6    verbose: bool,
7}
8
9impl Runner {
10    pub fn new(definition: String, verbose: bool) -> Runner {
11        let roller = Roller::parse(&definition);
12
13        Runner {
14            definition,
15            roller,
16            verbose,
17        }
18    }
19
20    pub fn result(&self) -> RollResult {
21        self.roller.roll()
22    }
23
24    pub fn run(&self) {
25        let result = self.result();
26
27        println!("{}", result.total());
28
29        if self.verbose {
30            eprintln!("Definition: {}", self.definition);
31            eprintln!("Rolls: {:?}", result.rolls());
32        }
33    }
34}
35
36#[cfg(test)]
37mod test_runner {
38    use super::*;
39
40    #[test]
41    fn runner_new_interprets_input() {
42        let definition = "2d4+5".to_string();
43        let verbose = false;
44        let runner = Runner::new(definition, verbose);
45
46        assert_eq!("2d4+5", runner.definition);
47        assert_eq!(false, runner.verbose);
48    }
49}