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}