41 lines
696 B
Rust
41 lines
696 B
Rust
use std::borrow::{Borrow, BorrowMut};
|
|
|
|
pub struct DirtyTracker<T> {
|
|
inner: T,
|
|
dirty: bool,
|
|
}
|
|
|
|
impl<T> Borrow<T> for DirtyTracker<T> {
|
|
fn borrow(&self) -> &T {
|
|
&self.inner
|
|
}
|
|
}
|
|
|
|
impl<T> BorrowMut<T> for DirtyTracker<T> {
|
|
fn borrow_mut(&mut self) -> &mut T {
|
|
self.dirty = true;
|
|
&mut self.inner
|
|
}
|
|
}
|
|
|
|
impl<T> DirtyTracker<T> {
|
|
pub fn new(inner: T) -> DirtyTracker<T> {
|
|
DirtyTracker {
|
|
inner,
|
|
dirty: false,
|
|
}
|
|
}
|
|
|
|
pub fn is_dirty(&self) -> bool {
|
|
self.dirty
|
|
}
|
|
|
|
pub fn make_clean(&mut self) {
|
|
self.dirty = false;
|
|
}
|
|
|
|
pub fn into_inner(self) -> T {
|
|
self.inner
|
|
}
|
|
}
|