use crate::*;
#[derive(Data)]
pub(crate) struct SignalInner<T>
where
T: Clone,
{
#[get(pub(crate))]
#[set(pub(crate))]
pub(crate) value: T,
#[get(pub(crate))]
#[set(pub(crate))]
pub(crate) listeners: Vec<Box<dyn FnMut()>>,
#[get(pub(crate), type(copy))]
#[set(pub(crate))]
pub(crate) alive: bool,
}
#[derive(Debug)]
pub struct Signal<T>
where
T: Clone + PartialEq + 'static,
{
pub(crate) inner: *mut SignalInner<T>,
}
pub struct SignalCell<T>
where
T: Clone + PartialEq + 'static,
{
pub(crate) inner: UnsafeCell<Option<Signal<T>>>,
}