active_dom/reactivity/
mod.rs1use std::marker::PhantomData;
2pub use runtime::Runtime;
3use runtime::{EffectId, SignalId};
4use signal::Signal;
5
6mod runtime;
7mod signal;
8
9pub fn create_signal<T>(ctx: &'static Runtime, value: T) -> Signal<T>
13where
14 T: 'static + Clone + Copy,
15{
16 let mut signals = ctx.signals.borrow_mut();
17 signals.push(Box::new(value));
18
19 let signal_id = SignalId(signals.len() - 1);
20
21 Signal {
22 ctx,
23 id: signal_id,
24 ty: PhantomData::<T>,
25 }
26}
27
28pub fn create_effect(ctx: &'static Runtime, func: impl Fn() + 'static) {
32 let effect_id = {
33 let mut effects = ctx.effects.borrow_mut();
34 effects.push(Box::new(func));
35
36 EffectId(effects.len() - 1)
37 };
38
39 ctx.run_effect(effect_id);
40}
41
42