BorrowedBuf in alloc::io - Rust
Description: A borrowed buffer of initially uninitialized elements, which is incrementally filled.

Skip to main content

## BorrowedBuf

# Struct BorrowedBuf

Source

    pub struct BorrowedBuf<'data, T> { /* private fields */ }

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)
Expand description

A borrowed buffer of initially uninitialized elements, which is incrementally filled.

This type makes it safer to work with `MaybeUninit` buffers, such as to read into a buffer without having to initialize it first. It tracks the region of elements that have been filled and whether the unfilled region was initialized.

In summary, the contents of the buffer can be visualized as:

    [                capacity                ]
    [ filled | unfilled (may be initialized) ]

A `BorrowedBuf` is created around some existing elements (or capacity for elements) via a unique reference (`&mut`). The `BorrowedBuf` can be configured (e.g., using `clear` or `set_init`), but cannot be directly written. To write into the buffer, use `unfilled` to create a `BorrowedCursor`. The cursor has write-only access to the unfilled portion of the buffer (you can think of it as a write-only iterator).

The lifetime `'data` is a bound on the lifetime of the underlying elements.

The type is most commonly used to manage bytes, but can manage any type of elements.

## Implementations§

Source§

### impl<'data, T> BorrowedBuf<'data, T>

Source

#### pub fn capacity(&self) -> usize

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns the total capacity of the buffer.

Source

#### pub fn len(&self) -> usize

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns the length of the filled part of the buffer.

Source

#### pub fn is_init(&self) -> bool

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Returns `true` if the buffer is initialized.

Source§

### impl<'data, T> BorrowedBuf<'data, T>
where T: Copy,

Source

#### pub fn filled(&self) -> &[T]

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a shared reference to the filled portion of the buffer.

Source

#### pub fn filled_mut(&mut self) -> &mut [T]

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a mutable reference to the filled portion of the buffer.

Source

#### pub fn into_filled(self) -> &'data [T]

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a shared reference to the filled portion of the buffer with its original lifetime.

Source

#### pub fn into_filled_mut(self) -> &'data mut [T]

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a mutable reference to the filled portion of the buffer with its original lifetime.

Source

#### pub fn unfilled<'this>(&'this mut self) -> BorrowedCursor<'this, T>

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a cursor over the unfilled part of the buffer.

Source

#### pub fn clear(&mut self) -> &mut BorrowedBuf<'data, T>

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Clears the buffer, resetting the filled region to empty.

The contents of the buffer are not modified.

Source

#### pub unsafe fn set_init(&mut self) -> &mut BorrowedBuf<'data, T>

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Asserts that the unfilled part of the buffer is initialized.

##### §Safety

All the elements of the buffer must be initialized.

## Trait Implementations§

Source§

### impl<T> Debug for BorrowedBuf<'_, T>

Source§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

### impl<'data, T> From<&'data mut [MaybeUninit<T>]> for BorrowedBuf<'data, T>
where T: Copy,

Creates a new `BorrowedBuf` from an uninitialized buffer.

Source§

#### fn from(buf: &'data mut [MaybeUninit<T>]) -> BorrowedBuf<'data, T>

Converts to this type from the input type.
Source§

### impl<'data, T> From<&'data mut [T]> for BorrowedBuf<'data, T>
where T: Copy,

Creates a new `BorrowedBuf` from a fully initialized slice.

Source§

#### fn from(slice: &'data mut [T]) -> BorrowedBuf<'data, T>

Converts to this type from the input type.
Source§

### impl<'data, T> From<BorrowedCursor<'data, T>> for BorrowedBuf<'data, T>
where T: Copy,

Creates a new `BorrowedBuf` from a cursor.

Use `BorrowedCursor::with_unfilled_buf` instead for a safer alternative.

Source§

#### fn from(buf: BorrowedCursor<'data, T>) -> BorrowedBuf<'data, T>

Converts to this type from the input type.

## Auto Trait Implementations§

§

### impl<'data, T> !UnwindSafe for BorrowedBuf<'data, T>

§

### impl<'data, T> Freeze for BorrowedBuf<'data, T>

§

### impl<'data, T> RefUnwindSafe for BorrowedBuf<'data, T>
where T: RefUnwindSafe,

§

### impl<'data, T> Send for BorrowedBuf<'data, T>
where T: Send,

§

### impl<'data, T> Sync for BorrowedBuf<'data, T>
where T: Sync,

§

### impl<'data, T> Unpin for BorrowedBuf<'data, T>

§

### impl<'data, T> UnsafeUnpin for BorrowedBuf<'data, T>

## Blanket Implementations§

Source§

### impl<T> Any for T
where T: 'static + ?Sized,

Source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
Source§

### impl<T> Borrow<T> for T
where T: ?Sized,

Source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

### impl<T> From<T> for T

Source§

#### fn from(t: T) -> T

Returns the argument unchanged.

Source§

### impl<T, U> Into<U> for T
where U: From<T>,

Source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

Source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

#### type Error = Infallible

The type returned in the event of a conversion error.
Source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.