mobbit/
lib.rs

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}