1use std::time::Duration;
2use std::thread;
3use console::style;
4use indicatif::{ ProgressBar, ProgressStyle };
5
6pub struct Turn {
7 minutes: u64,
8 duration: Duration,
9}
10
11impl Turn {
12 pub fn new(minutes: u64) -> Turn {
13 Turn {
14 minutes: minutes,
15 duration: Duration::from_secs(minutes * 60),
16 }
17 }
18
19 pub fn start(&self) {
20 println!("{} {} minutes remaining...", style("Turn started").green(), self.minutes);
21 let seconds = self.duration.as_secs();
22
23 let bar = ProgressBar::new(seconds);
24 bar.set_style(ProgressStyle::default_bar()
25 .template("[{eta_precise}] {bar:50.cyan/blue} {msg}")
26 .progress_chars("== "));
27
28 for i in 0..seconds {
29 thread::sleep(Duration::from_secs(1));
30 bar.inc(1);
31
32 if seconds >= 300 && i == seconds - 120 {
33 bar.set_message("2 minutes remaining...");
34 }
35
36 if i == seconds - 60 {
37 bar.set_message("1 minute remaining...");
38 }
39 }
40
41 bar.finish();
42 bar.set_message("Time to commit!");
43 }
44}