maycoon_core/signal/
fixed.rs

1use crate::signal::{Listener, Ref, Signal};
2use std::sync::Arc;
3
4/// A signal with a fixed value.
5///
6/// The inner value cannot be changed and listeners do not exist.
7/// Useful for testing purposes.
8#[derive(Clone)]
9pub struct FixedSignal<T> {
10    value: Arc<T>,
11}
12
13impl<T> FixedSignal<T> {
14    /// Creates a new fixed signal.
15    pub fn new(value: T) -> Self {
16        Self {
17            value: Arc::new(value),
18        }
19    }
20}
21
22impl<T: 'static> Signal<T> for FixedSignal<T> {
23    fn get(&self) -> Ref<T> {
24        Ref::Arc(self.value.clone())
25    }
26
27    fn set_value(&self, _: T) {}
28
29    fn listen(&mut self, _: Listener<T>) {}
30
31    fn notify(&self) {}
32}