pub unsafe trait WriteBuf {
// Required methods
fn as_slice(&self) -> &[u8] ⓘ;
fn capacity(&self) -> usize;
fn as_mut_ptr(&mut self) -> *mut u8;
unsafe fn filled_until(&mut self, n: usize);
// Provided method
unsafe fn write_from<F>(&mut self, f: F) -> SafeResult
where F: FnOnce(*mut c_void, usize) -> SafeResult { ... }
}
Expand description
Describe a resizeable bytes container like Vec<u8>
.
Can start from uninitialized memory, and will be partially filled.
Should be implemented by a contiguous chunk of memory.
The main implementors are:
Vec<u8>
and similar structures. These can start empty with a non-zero capacity, and they will be resized to cover the data written.[u8]
and[u8; N]
. These must start already-initialized, and will not be resized. It will be up to the caller to only use the part that was written.
Required Methods§
sourcefn as_slice(&self) -> &[u8] ⓘ
fn as_slice(&self) -> &[u8] ⓘ
Returns the valid data part of this container. Should only cover initialized data.
sourcefn capacity(&self) -> usize
fn capacity(&self) -> usize
Returns the full capacity of this container. May include uninitialized data.
sourcefn as_mut_ptr(&mut self) -> *mut u8
fn as_mut_ptr(&mut self) -> *mut u8
Returns a pointer to the start of the data.
sourceunsafe fn filled_until(&mut self, n: usize)
unsafe fn filled_until(&mut self, n: usize)
Indicates that the first n
bytes of the container have been written.
Provided Methods§
sourceunsafe fn write_from<F>(&mut self, f: F) -> SafeResult
unsafe fn write_from<F>(&mut self, f: F) -> SafeResult
Call the given closure using the pointer and capacity from self
.
Assumes the given function returns a parseable code, which if valid, represents how many
bytes were written to self
.
The given closure must treat its first argument as pointing to potentially uninitialized memory, and should not read from it.
In addition, it must have written at least n
bytes contiguously from this pointer, where
n
is the returned value.