use crate::*;
#[derive(CustomDebug, Data, New)]
pub(crate) struct SignalInner<T>
where
T: Clone,
{
#[debug(skip)]
#[get(pub(crate))]
#[set(pub(crate))]
pub(crate) value: T,
#[debug(skip)]
#[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(CustomDebug, Data, Default, Eq, New, PartialEq)]
pub struct Signal<T>
where
T: Clone + PartialEq + 'static,
{
#[debug(skip)]
#[get(pub(crate), type(copy))]
#[set(pub(crate))]
pub(crate) inner: usize,
#[debug(skip)]
#[get(pub(crate), type(copy))]
#[set(pub(crate))]
pub(crate) _marker: std::marker::PhantomData<fn() -> T>,
}
#[derive(CustomDebug, Data, New)]
pub struct SignalCell<T>
where
T: Clone + PartialEq + 'static,
{
#[debug(skip)]
#[get(pub(crate))]
#[set(pub(crate))]
pub(crate) inner: UnsafeCell<Option<Signal<T>>>,
}
#[derive(Data, Debug, New)]
pub(crate) struct SignalInnerRegistryCell(
#[get(pub(crate))]
#[set(pub(crate))]
pub(crate) UnsafeCell<Option<HashMap<usize, Rc<dyn Any>>>>,
);