obs_wrapper/
wrapper.rs

1use std::mem::forget;
2
3pub trait PtrWrapper: Sized {
4    type Pointer;
5    /// Wraps the pointer into a **owned** wrapper.
6    ///
7    /// # Safety
8    ///
9    /// Pointer must be valid.
10    unsafe fn from_raw(raw: *mut Self::Pointer) -> Self;
11
12    /// Returns the inner pointer.
13    fn as_ptr(&self) -> *const Self::Pointer;
14
15    /// Consumes the wrapper and transfers ownershop to the pointer
16    ///
17    /// This does **NOT** drop the wrapper internally.
18    fn into_raw(mut self) -> *mut Self::Pointer {
19        let raw = self.as_ptr_mut();
20        forget(self);
21        raw
22    }
23
24    /// Returns the inner pointer (mutable version).
25    fn as_ptr_mut(&mut self) -> *mut Self::Pointer {
26        self.as_ptr() as *mut _
27    }
28}