reactive_signals/signals/types/
mod.rs1mod client;
5mod data;
6mod func;
7mod server;
8
9pub use client::*;
10pub use data::*;
11pub use func::*;
12pub use server::*;
13
14#[doc(hidden)]
15pub trait SignalType: 'static {
16 type Inner;
17
18 fn is_eq(&self, _other: &Self::Inner) -> bool {
19 false
20 }
21 fn opt_hash(&self) -> Option<u64> {
22 None
23 }
24
25 fn inner(&self) -> &Self::Inner;
26 fn inner_mut(&mut self) -> &mut Self::Inner;
27 fn new(value: Self::Inner) -> Self;
28}
29
30#[doc(hidden)]
31pub trait Modifiable {}
32
33#[doc(hidden)]
34pub trait Readable {}
35
36#[doc(hidden)]
37pub trait OptReadable {
38 const RUN_ON_SERVER: bool = true;
39 const RUN_ON_CLIENT: bool = true;
40}
41
42#[cfg(test)]
43fn set<T: 'static + SignalType>(val1: &T, val2: &T::Inner) -> bool {
44 val1.is_eq(&val2)
45}
46
47#[test]
48fn cmp_test() {
49 use crate::signals::{Data, EqData};
50
51 let d1 = Data(3);
52 let d2 = Data(2);
53
54 assert_eq!(set(&d1, &d2.inner()), false);
55 assert_eq!(set(&d1, &d1.inner()), false);
56
57 let d1 = EqData(3);
58 let d2 = EqData(2);
59
60 assert_eq!(set(&d1, &d2.inner()), false);
61 assert_eq!(set(&d1, &d1.inner()), true);
62}