summary refs log tree commit diff
path: root/src/util/tracker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/tracker.rs')
-rw-r--r--src/util/tracker.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/util/tracker.rs b/src/util/tracker.rs
index 69a1c5f..060acae 100644
--- a/src/util/tracker.rs
+++ b/src/util/tracker.rs
@@ -1,3 +1,5 @@
+use std::ops::Deref;
+
 pub struct Tracker<T> {
     inner: T,
     dirty: bool,
@@ -40,8 +42,24 @@ impl<T> Tracker<T> {
     }
 }
 
+impl<T> Deref for Tracker<T> {
+    type Target = T;
+
+    fn deref(&self) -> &Self::Target {
+        self.get()
+    }
+}
+
 impl<T: Default> Default for Tracker<T> {
     fn default() -> Self {
         Self::new(T::default())
     }
 }
+
+impl<T: Eq> Tracker<T> {
+    pub fn set_if_ne(&mut self, value: T) {
+        if self.inner != value {
+            self.set(value);
+        }
+    }
+}