use core::cell::Ref; use core::fmt; use core::ops::Deref; use core::pin::Pin; #[derive(Debug)] /// A wrapper type for a immutably borrowed value from a `PinCell`. pub struct PinRef<'a, T: ?Sized> { pub(crate) inner: Pin>, } impl<'a, T: ?Sized> Deref for PinRef<'a, T> { type Target = T; fn deref(&self) -> &T { &*self.inner } } /* TODO implement these APIs impl<'a, T: ?Sized> PinRef<'a, T> { pub fn clone(orig: &PinRef<'a, T>) -> PinRef<'a, T> { panic!() } pub fn map(orig: PinRef<'a, T>, f: F) -> PinRef<'a, U> where F: FnOnce(Pin<&T>) -> Pin<&U>, { panic!() } pub fn map_split(orig: PinRef<'a, T>, f: F) -> (PinRef<'a, U>, PinRef<'a, V>) where F: FnOnce(Pin<&T>) -> (Pin<&U>, Pin<&V>) { panic!() } } */ impl<'a, T: fmt::Display + ?Sized> fmt::Display for PinRef<'a, T> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { ::fmt(&**self, f) } } // TODO CoerceUnsized