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