diff --git a/src/lib.rs b/src/lib.rs index aa1311a..0c34691 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,15 +31,24 @@ impl OwnRef<'_, T> { pub unsafe fn new_unchecked(p: NonNull) -> Self { Self(Some(p), PhantomData) } + + pub fn into_inner(mut self) -> NonNull { + self.0.take().unwrap() + } } impl<'a, T: ?Sized> OwnRef<'a, T> { pub unsafe fn from_manually_drop(p: &'a mut ManuallyDrop) -> Self { unsafe { Self::new_unchecked(p.deref_mut().into()) } } + + pub fn into_manually_drop(self) -> &'a mut ManuallyDrop { + let p = self.into_inner().as_ptr() as *mut ManuallyDrop; + unsafe { p.as_mut().unwrap() } + } } -impl OwnRef<'_, T> { +impl OwnRef<'_, T> { pub fn take(mut self) -> T { let p = self.0.take().unwrap(); unsafe { p.read() }