//! Polyfills for functions in the standard library that are currently gated //! behind unstable features. use core::mem::MaybeUninit; #[cfg(feature = "alloc")] use {alloc::vec::Vec, core::mem::ManuallyDrop}; /// Polyfill for the unstable `MaybeUninit::slice_assume_init_ref` function. /// /// See . pub const unsafe fn maybe_uninit_slice_assume_init_ref(s: &[MaybeUninit]) -> &[T] { unsafe { &*(s as *const [MaybeUninit] as *const [T]) } } /// Polyfill for the unstable `MaybeUninit::slice_as_mut_ptr` function. /// /// See . pub fn maybe_uninit_slice_as_mut_ptr(s: &mut [MaybeUninit]) -> *mut T { s.as_mut_ptr().cast::() } /// Polyfill for the unstable `Vec::into_raw_parts` function. /// /// See . #[cfg(feature = "alloc")] pub fn vec_into_raw_parts(v: Vec) -> (*mut T, usize, usize) { let mut v = ManuallyDrop::new(v); (v.as_mut_ptr(), v.len(), v.capacity()) }