maycoon_core/signal/
fixed.rs1use crate::signal::{Ref, Signal};
2use std::rc::Rc;
3
4pub struct FixedSignal<T: 'static> {
10 value: Rc<T>,
11}
12
13impl<T: 'static> FixedSignal<T> {
14 #[inline(always)]
16 pub fn new(value: T) -> Self {
17 Self {
18 value: Rc::new(value),
19 }
20 }
21}
22
23impl<T: 'static> Signal<T> for FixedSignal<T> {
24 #[inline(always)]
25 fn get(&self) -> Ref<'_, T> {
26 Ref::Borrow(self.value.as_ref())
27 }
28
29 #[inline(always)]
30 fn set_value(&self, _: T) {}
31
32 #[inline(always)]
33 fn listen(self, _: Box<dyn Fn(Ref<'_, T>)>) -> Self
34 where
35 Self: Sized,
36 {
37 self
38 }
39
40 #[inline(always)]
41 fn notify(&self) {}
42
43 #[inline(always)]
44 fn dyn_clone(&self) -> Box<dyn Signal<T>> {
45 Box::new(self.clone())
46 }
47}
48
49impl<T: 'static> From<Rc<T>> for FixedSignal<T> {
50 #[inline(always)]
51 fn from(value: Rc<T>) -> Self {
52 Self { value }
53 }
54}
55
56impl<T: 'static> Clone for FixedSignal<T> {
57 #[inline(always)]
58 fn clone(&self) -> Self {
59 Self {
60 value: self.value.clone(),
61 }
62 }
63}