event_observer/
observer.rs1use std::cell::RefCell;
2use std::rc::Rc;
3use std::sync::{Arc, Mutex, RwLock};
4
5pub trait Observer<E> {
6 fn on_notify(&self, event: &E);
7}
8
9pub trait MutObserver<E> {
10 fn on_notify(&mut self, event: &E);
11}
12
13impl<E> Observer<E> for Rc<dyn Observer<E>> {
14 fn on_notify(&self, event: &E) {
15 (**self).on_notify(event)
16 }
17}
18
19impl<E> Observer<E> for Rc<RefCell<dyn Observer<E>>> {
20 fn on_notify(&self, event: &E) {
21 self.borrow().on_notify(event)
22 }
23}
24
25impl<E> Observer<E> for Rc<RefCell<dyn MutObserver<E>>> {
26 fn on_notify(&self, event: &E) {
27 self.borrow_mut().on_notify(event)
28 }
29}
30
31impl<E> Observer<E> for Arc<dyn Observer<E>> {
32 fn on_notify(&self, event: &E) {
33 (**self).on_notify(event)
34 }
35}
36
37impl<E> Observer<E> for Arc<Mutex<dyn Observer<E>>> {
38 fn on_notify(&self, event: &E) {
39 self.lock().unwrap().on_notify(event)
40 }
41}
42
43impl<E> Observer<E> for Arc<Mutex<dyn MutObserver<E>>> {
44 fn on_notify(&self, event: &E) {
45 self.lock().unwrap().on_notify(event)
46 }
47}
48
49impl<E> Observer<E> for Arc<RwLock<dyn Observer<E>>> {
50 fn on_notify(&self, event: &E) {
51 self.read().unwrap().on_notify(event)
52 }
53}
54
55impl<E> Observer<E> for Arc<RwLock<dyn MutObserver<E>>> {
56 fn on_notify(&self, event: &E) {
57 self.write().unwrap().on_notify(event)
58 }
59}