-
Notifications
You must be signed in to change notification settings - Fork 22
Closed
Labels
ACP-acceptedAPI Change Proposal is accepted (seconded with no objections)API Change Proposal is accepted (seconded with no objections)T-libs-apiapi-change-proposalA proposal to add or alter unstable APIs in the standard librariesA proposal to add or alter unstable APIs in the standard libraries
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.
Metadata
Metadata
Assignees
Labels
ACP-acceptedAPI Change Proposal is accepted (seconded with no objections)API Change Proposal is accepted (seconded with no objections)T-libs-apiapi-change-proposalA proposal to add or alter unstable APIs in the standard librariesA proposal to add or alter unstable APIs in the standard libraries
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
Amanieu commentedon Nov 5, 2024
We discussed this in the libs-api meeting and we're happy with these methods.
joshtriplett commentedon Nov 5, 2024
Quick correction:
into_filled_mut
has the wrong signature, it should takeself
.joshtriplett commentedon Nov 5, 2024
Looks like rust-lang/rust#132533 is correct and this was just a typo in the ACP.
SUPERCILEX commentedon Nov 5, 2024
Oops, yeah sorry. Fixed.
Rollup merge of rust-lang#132533 - SUPERCILEX:patch-4, r=Mark-Simulacrum
Unrolled build for rust-lang#132533