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}