Closed
Description
Proposal
Problem statement
I'd like to be able to modify a MaybeUninit buffer and return the contents to the caller.
Motivating examples or use cases
Currently, if a function wishes to safely modified a MaybeUninit buffer passed in by reference by the caller, they cannot return the filled buffer to the caller.
Fixing this would let the following code compile:
pub fn direct_file_name(
buf: &mut [MaybeUninit<u8>; DIRECT_FILE_NAME_LEN + 1],
to: RingKind,
index: u32,
) -> DirectFileNameToken<()> {
let mut buf = BorrowedBuf::from(buf.as_mut_slice());
write!(buf.unfilled(), "{:0>13}\0", composite_id(to, index)).unwrap();
DirectFileNameToken(buf.filled_mut(), PhantomData) // Doesn't compile!
}
Solution sketch
Add two methods:
fn into_filled(self) -> &'data [u8]
fn into_filled_mut(self) -> &'data mut [u8]
Alternatives
Transmute to get lifetime extension or manually convert the MaybeUninits to u8s by using the filled length. Both of these solutions are very error prone and annoying to write.