proteus_lib/tools/
timer.rs1use std::time::{Duration, Instant};
4
5#[derive(Debug, Clone)]
7pub struct Timer {
8 pub time: Duration,
9 start_time: Option<Instant>,
10}
11
12impl Timer {
13 pub fn new() -> Self {
15 Self {
16 time: Duration::new(0, 0),
17 start_time: None,
18 }
19 }
20
21 pub fn start(&mut self) {
23 self.start_time = Some(Instant::now());
24 }
25
26 pub fn start_at(&mut self, time: Duration) {
28 self.start_time = Some(Instant::now());
29 self.time = time;
30 }
31
32 pub fn un_pause(&mut self) {
34 if self.start_time == None {
35 self.start_time = Some(Instant::now());
36 }
37 }
38
39 pub fn pause(&mut self) {
41 if let Some(start) = self.start_time {
42 self.time += start.elapsed();
43 self.start_time = None;
44 }
45 }
46
47 pub fn stop(&mut self) {
49 self.reset();
50 }
51
52 pub fn get_time(&self) -> Duration {
54 if let Some(start) = self.start_time {
55 self.time + start.elapsed()
56 } else {
57 self.time
58 }
59 }
60
61 pub fn reset(&mut self) {
63 self.start_time = None;
64 self.time = Duration::new(0, 0);
65 }
66}