1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::ops::{Deref, DerefMut};
impl<Data> Observable<Data> {
pub fn new(value: Data) -> Observable<Data> {
Observable {
data: value,
listeners: Vec::new(),
}
}
pub fn change(&mut self, change_fn: fn(&mut Data) -> ()) {
change_fn(&mut self.data);
self.notify();
}
pub fn add_listener(&mut self, listener: fn(&Data) -> ()) {
self.listeners.push(listener);
}
fn notify(&mut self) {
for listener in self.listeners.iter() {
listener(&self.data);
}
}
}
pub struct Observable<Data> {
data: Data,
listeners: Vec<fn(&Data) -> ()>,
}
impl<Data> Deref for Observable<Data> {
type Target = Data;
fn deref(&self) -> &Self::Target {
&self.data
}
}