#![allow(dead_code)] use once_cell::unsync::OnceCell; /// Wrapper around `OnceCell` implementing `Deref`, and thus also panicking /// when not set (or set twice). /// /// To be used in place of `gtk::TemplateChild`, but without xml. pub struct DerefCell(OnceCell); impl DerefCell { #[track_caller] pub fn set(&self, value: T) { if self.0.set(value).is_err() { panic!("Initialized twice"); } } } impl Default for DerefCell { fn default() -> Self { Self(OnceCell::default()) } } impl std::ops::Deref for DerefCell { type Target = T; #[track_caller] fn deref(&self) -> &T { self.0.get().unwrap() } }