diff --git a/src/buffer.rs b/src/buffer.rs index 1ab0ee1ae..a8b307d4e 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -154,6 +154,25 @@ impl private::Sealed for &mut Vec { } } +impl<'a, T> private::Sealed for &'a mut MaybeUninit { + type Output = Option<&'a mut T>; + + #[inline] + fn parts_mut(&mut self) -> (*mut T, usize) { + (self.as_mut_ptr(), 1) + } + + #[inline] + unsafe fn assume_init(self, len: usize) -> Self::Output { + if len == 0 { + None + } else { + // SAFETY: The user asserts that the object is now initialized. + Some(MaybeUninit::assume_init_mut(self)) + } + } +} + impl<'a, T> private::Sealed for &'a mut [MaybeUninit] { type Output = (&'a mut [T], &'a mut [MaybeUninit]);