event-observer 0.1.0

Implementation of observer pattern by rust.
Documentation
use std::cell::RefCell;
use std::rc::Rc;
use std::sync::{Arc, Mutex, RwLock};

pub trait Observer<E> {
    fn on_notify(&self, event: &E);
}

pub trait MutObserver<E> {
    fn on_notify(&mut self, event: &E);
}

impl<E> Observer<E> for Rc<dyn Observer<E>> {
    fn on_notify(&self, event: &E) {
        (**self).on_notify(event)
    }
}

impl<E> Observer<E> for Rc<RefCell<dyn Observer<E>>> {
    fn on_notify(&self, event: &E) {
        self.borrow().on_notify(event)
    }
}

impl<E> Observer<E> for Rc<RefCell<dyn MutObserver<E>>> {
    fn on_notify(&self, event: &E) {
        self.borrow_mut().on_notify(event)
    }
}

impl<E> Observer<E> for Arc<dyn Observer<E>> {
    fn on_notify(&self, event: &E) {
        (**self).on_notify(event)
    }
}

impl<E> Observer<E> for Arc<Mutex<dyn Observer<E>>> {
    fn on_notify(&self, event: &E) {
        self.lock().unwrap().on_notify(event)
    }
}

impl<E> Observer<E> for Arc<Mutex<dyn MutObserver<E>>> {
    fn on_notify(&self, event: &E) {
        self.lock().unwrap().on_notify(event)
    }
}

impl<E> Observer<E> for Arc<RwLock<dyn Observer<E>>> {
    fn on_notify(&self, event: &E) {
        self.read().unwrap().on_notify(event)
    }
}

impl<E> Observer<E> for Arc<RwLock<dyn MutObserver<E>>> {
    fn on_notify(&self, event: &E) {
        self.write().unwrap().on_notify(event)
    }
}