use std::ops::{Deref, DerefMut}; #[derive(Debug)] pub struct LazyMut(Option); impl Deref for LazyMut { type Target = T; fn deref(&self) -> &Self::Target { unreachable!(); } } impl DerefMut for LazyMut { fn deref_mut(&mut self) -> &mut Self::Target { return self.0.get_or_insert_with(|| T::default()); } } impl Default for LazyMut { fn default() -> Self { return Self(None); } }