#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct Data { raw: T, version: usize, } impl Data { 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; } }