terrazzo_client/signal/
weak.rs1use 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}