#[repr(C)]
#[derive(Debug)]
#[doc(hidden)]
pub struct StableSlice<T> {
ptr: *mut T,
len: usize,
}
impl<T> StableSlice<T> {
pub fn new(mut x: Vec<T>) -> Self {
x.shrink_to_fit();
assert_eq!(x.len(), x.capacity());
let ptr = x.as_mut_ptr();
let len = x.len();
std::mem::forget(x);
Self { ptr, len }
}
pub fn into_owned(self) -> Vec<T> {
unsafe { Vec::from_raw_parts(self.ptr, self.len, self.len) }
}
pub fn raw_parts(&self) -> (*mut T, usize) {
(self.ptr, self.len)
}
}
#[repr(C)]
#[derive(Debug)]
pub enum StableOption<T> {
None,
Some(T),
}