terrazzo-client 0.1.2

A simple macro to clone variables before passing them into a `move` closure or async block.
Documentation
use std::sync::Arc;
use std::sync::Weak;

use super::XSignal;
use super::XSignalInner;

pub struct XSignalWeak<T>(Weak<XSignalInner<T>>);

impl<T> XSignalWeak<T> {
    pub fn upgrade(&self) -> Option<XSignal<T>> {
        Some(XSignal(self.0.upgrade()?))
    }
}

impl<T> XSignal<T> {
    pub fn downgrade(&self) -> XSignalWeak<T> {
        XSignalWeak(Arc::downgrade(&self.0))
    }
}

impl<T> Clone for XSignalWeak<T> {
    fn clone(&self) -> Self {
        Self(self.0.clone())
    }
}