react/use_ref/
traits.rs

1use std::rc::Rc;
2
3pub trait ReadRef<T> {
4    fn current(&self) -> T;
5}
6
7pub trait WriteRef<T> {
8    fn set_current(&self, v: T);
9}
10
11pub trait MutableRef<T>: WriteRef<T> + ReadRef<T> {}
12
13impl<T, S: WriteRef<T> + ReadRef<T>> MutableRef<T> for S {}
14
15impl<T, F: ?Sized + Fn(T)> WriteRef<T> for F {
16    fn set_current(&self, v: T) {
17        self(v)
18    }
19}
20
21impl<T, F: ?Sized + Fn(T)> WriteRef<T> for Rc<F> {
22    fn set_current(&self, v: T) {
23        self(v)
24    }
25}