1use std::time::{Duration, Instant};
2
3#[derive(Debug, Clone)]
4pub struct Timer {
5 pub time: Duration,
6 start_time: Option<Instant>,
7}
8
9impl Timer {
10 pub fn new() -> Self {
11 Self {
12 time: Duration::new(0, 0),
13 start_time: None,
14 }
15 }
16
17 pub fn start(&mut self) {
18 self.start_time = Some(Instant::now());
19 }
20
21 pub fn start_at(&mut self, time: Duration) {
22 self.start_time = Some(Instant::now());
23 self.time = time;
24 }
25
26 pub fn un_pause(&mut self) {
27 if self.start_time == None {
28 self.start_time = Some(Instant::now());
29 }
30 }
31
32 pub fn pause(&mut self) {
33 if let Some(start) = self.start_time {
34 self.time += start.elapsed();
35 self.start_time = None;
36 }
37 }
38
39 pub fn stop(&mut self) {
40 self.reset();
41 }
42
43 pub fn get_time(&self) -> Duration {
44 if let Some(start) = self.start_time {
45 self.time + start.elapsed()
46 } else {
47 self.time
48 }
49 }
50
51 pub fn reset(&mut self) {
52 self.start_time = None;
53 self.time = Duration::new(0, 0);
54 }
55}