terrazzo_client/signal/
weak.rs

1use super::XSignal;
2use super::XSignalInner;
3use crate::utils::Ptr;
4use crate::utils::PtrWeak;
5
6pub struct XSignalWeak<T>(PtrWeak<XSignalInner<T>>);
7
8impl<T> XSignalWeak<T> {
9    pub const fn new() -> Self {
10        XSignalWeak(PtrWeak::new())
11    }
12}
13
14impl<T> XSignalWeak<T> {
15    pub fn upgrade(&self) -> Option<XSignal<T>> {
16        Some(XSignal(self.0.upgrade()?))
17    }
18}
19
20impl<T> XSignal<T> {
21    pub fn downgrade(&self) -> XSignalWeak<T> {
22        XSignalWeak(Ptr::downgrade(&self.0))
23    }
24}
25
26impl<T> Clone for XSignalWeak<T> {
27    fn clone(&self) -> Self {
28        Self(self.0.clone())
29    }
30}
31
32impl<T> Default for XSignalWeak<T> {
33    fn default() -> Self {
34        Self::new()
35    }
36}