use core::ops::Deref; use core::fmt; use alloc::rc::Rc; pub struct Urc(Rc); impl Urc { pub fn new(value: T) -> Urc { Urc(Rc::new(value)) } } unsafe impl Send for Urc {} unsafe impl Sync for Urc {} impl Deref for Urc { type Target = T; fn deref(&self) -> &Self::Target { self.0.deref() } } impl Clone for Urc { fn clone(&self) -> Urc { Urc(self.0.clone()) } } impl fmt::Debug for Urc { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fmt::Debug::fmt(&**self, f) } }