1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct Data<T> { raw: T, version: usize, } impl<T> Data<T> { pub fn new(data: T) -> Self { Data { raw: data, version: 0, } } pub fn update(&mut self, f: impl FnOnce(&mut T)) { f(&mut self.raw); self.version += 1; } }