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}