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
use std::rc::Rc;
pub trait ReadRef<T> {
fn current(&self) -> T;
}
pub trait WriteRef<T> {
fn set_current(&self, v: T);
}
pub trait MutableRef<T>: WriteRef<T> + ReadRef<T> {}
impl<T, S: WriteRef<T> + ReadRef<T>> MutableRef<T> for S {}
impl<T, F: ?Sized + Fn(T)> WriteRef<T> for F {
fn set_current(&self, v: T) {
self(v)
}
}
impl<T, F: ?Sized + Fn(T)> WriteRef<T> for Rc<F> {
fn set_current(&self, v: T) {
self(v)
}
}