reactive_signals/signals/kinds/
func.rs1use crate::{
2 primitives::DynFunc,
3 runtimes::Runtime,
4 signals::{EqFunc, Func},
5 Scope, Signal,
6};
7
8pub trait EqFuncKind {
9 #[inline]
10 fn signal_kind(&self) -> EqFuncSignal {
11 EqFuncSignal
12 }
13}
14
15impl<F, T, RT: Runtime> EqFuncKind for (Scope<RT>, F)
17where
18 F: Fn() -> T + 'static,
19 T: PartialEq + 'static,
20{
21}
22
23pub trait TrueFuncKind {
24 #[inline]
25 fn signal_kind(&self) -> TrueFunc {
26 TrueFunc
27 }
28}
29
30impl<F, T, RT: Runtime> TrueFuncKind for &(Scope<RT>, F)
32where
33 F: Fn() -> T + 'static,
34 T: 'static,
35{
36}
37
38pub struct EqFuncSignal;
39
40impl EqFuncSignal {
41 #[inline]
42 pub fn new<F, T, RT: Runtime>(self, tuple: (Scope<RT>, F)) -> Signal<EqFunc<T>, RT>
43 where
44 F: Fn() -> T + 'static,
45 T: PartialEq + 'static,
46 {
47 let (sx, func) = tuple;
48 Signal::func(sx, || DynFunc::new::<F, T, EqFunc<T>>(func))
49 }
50}
51pub struct TrueFunc;
52
53impl TrueFunc {
54 #[inline]
55 pub fn new<F, T, RT: Runtime>(self, tuple: (Scope<RT>, F)) -> Signal<Func<T>, RT>
56 where
57 F: Fn() -> T + 'static,
58 T: 'static,
59 {
60 let (sx, func) = tuple;
61 Signal::func(sx, || DynFunc::new::<F, T, Func<T>>(func))
62 }
63}