mc_core/util/
cache.rs

1use std::time::{Instant, Duration};
2use std::ops::{Deref, DerefMut};
3
4
5pub struct TimedCache<T> {
6    value: T,
7    last_update: Instant,
8    lifetime: Duration
9}
10
11impl<T> TimedCache<T> {
12
13    pub fn new(value: T, lifetime: Duration) -> Self {
14        Self {
15            value,
16            last_update: Instant::now(),
17            lifetime
18        }
19    }
20
21    pub fn cache_update(&mut self) -> &mut Self {
22        self.last_update = Instant::now();
23        self
24    }
25
26    pub fn is_cache_timed_out(&self) -> bool {
27        self.last_update.elapsed() >= self.lifetime
28    }
29
30}
31
32impl<T> Deref for TimedCache<T> {
33    type Target = T;
34    fn deref(&self) -> &T {
35        &self.value
36    }
37}
38
39impl<T> DerefMut for TimedCache<T> {
40    fn deref_mut(&mut self) -> &mut T {
41        &mut self.value
42    }
43}