1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//! Utilities to help with buffering.

#![allow(unsafe_code)]

use core::mem::MaybeUninit;
use core::slice;

/// Split an uninitialized byte slice into initialized and uninitialized parts.
///
/// # Safety
///
/// At least `init` bytes must be initialized.
#[inline]
pub(super) unsafe fn split_init(
    buf: &mut [MaybeUninit<u8>],
    init: usize,
) -> (&mut [u8], &mut [MaybeUninit<u8>]) {
    let (init, uninit) = buf.split_at_mut(init);
    let init = slice::from_raw_parts_mut(init.as_mut_ptr().cast::<u8>(), init.len());
    (init, uninit)
}