//! Weak object references (port of `apprt/gtk/weak_ref.zig`). glib-rs //! already provides `glib::WeakRef`; this wrapper keeps the Zig API //! (`set`/`get`/`empty`). use gtk::{glib, glib::prelude::*}; /// A weak reference to a GObject of type `T`. #[derive(Debug, Default)] pub struct WeakRef(glib::WeakRef); impl WeakRef { /// An empty weak reference. pub fn empty() -> Self { Self(glib::WeakRef::new()) } pub fn set(&self, v: Option<&T>) { self.0.set(v); } pub fn get(&self) -> Option { self.0.upgrade() } } #[cfg(test)] mod tests { use super::*; #[test] fn weak_ref() { let r: WeakRef = WeakRef::empty(); let obj = glib::Object::new::(); r.set(Some(&obj)); assert!(r.get().is_some()); drop(obj); assert!(r.get().is_none()); } }