blackboard 1.1.0

A simple blackboard design pattern implementation in rust
Documentation
use std::rc::Rc;
use std::ops::Deref;

pub enum RcOrNormalRef<T: ?Sized> {
    Normal(Box<T>),
    Rc(Rc<T>),
}

use RcOrNormalRef::*;
impl<T: ?Sized> Deref for RcOrNormalRef<T> {
    type Target = T;
    fn deref(&self) -> &Self::Target {
        match self {
            Normal(inside) => inside,
            Rc(rc) => rc.deref(),
        }
    }
}

impl<T: ?Sized> RcOrNormalRef<T> {
    pub fn get_mut(&mut self) -> Option<&mut T> {
        match self {
            Normal(inside) => Some(inside),
            Rc(rc) => Rc::get_mut(rc),
        }
    }
}

impl<T: ?Sized> From<&T> for RcOrNormalRef<T> {
    fn from(what: T) -> RcOrNormalRef<T> {
        Normal(Box::new(what))
    }
}

impl<T: ?Sized> From<Box<T>> for RcOrNormalRef<T> {
    fn from(other: Box<T>) -> RcOrNormalRef<T> {
        Normal(other)
    }
}

impl<T: ?Sized> From<&Rc<T>> for RcOrNormalRef<T> {
    fn from(other: &Rc<T>) -> RcOrNormalRef<T> {
        Rc(Rc::clone(other))
    }
}