active_dom/reactivity/
mod.rs

1use std::marker::PhantomData;
2pub use runtime::Runtime;
3use runtime::{EffectId, SignalId};
4use signal::Signal;
5
6mod runtime;
7mod signal;
8
9/// Create Signal
10/// 
11/// 
12pub 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
28/// Create Effect
29/// 
30/// 
31pub 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