# Struct std::io::BorrowedBuf

source ·

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

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

A borrowed byte buffer which is incrementally filled and initialized.

This type is a sort of “double cursor”. It tracks three regions in the buffer: a region at the beginning of the buffer that has been logically filled with data, a region that has been initialized at some point but not yet logically filled, and a region at the end that is fully uninitialized. The filled region is guaranteed to be a subset of the initialized region.

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

    [             capacity              ]
    [ filled |         unfilled         ]
    [    initialized    | uninitialized ]

A `BorrowedBuf` is created around some existing data (or capacity for data) 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 data.

## Implementations§

source§

### impl<'data> BorrowedBuf<'data>

source

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

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

Returns the total capacity of the buffer.

source

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

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

Returns the length of the filled part of the buffer.

source

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

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

Returns the length of the initialized part of the buffer.

source

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

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

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

source

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

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

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

source

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

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

Returns a cursor over the unfilled part of the buffer.

source

#### pub fn clear(&mut self) -> &mut Self

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

Clears the buffer, resetting the filled region to empty.

The number of initialized bytes is not changed, and the contents of the buffer are not modified.

source

#### pub unsafe fn set_init(&mut self, n: usize) -> &mut Self

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

Asserts that the first `n` bytes of the buffer are initialized.

`BorrowedBuf` assumes that bytes are never de-initialized, so this method does nothing when called with fewer bytes than are already known to be initialized.

##### Safety

The caller must ensure that the first `n` unfilled bytes of the buffer have already been initialized.

## Trait Implementations§

source§

### impl Debug for BorrowedBuf<'_>

source§

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

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

### impl<'data> From<&'data mut [MaybeUninit<u8>]> for BorrowedBuf<'data>

Create a new `BorrowedBuf` from an uninitialized buffer.

Use `set_init` if part of the buffer is known to be already initialized.

source§

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

Converts to this type from the input type.
source§

### impl<'data> From<&'data mut [u8]> for BorrowedBuf<'data>

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

source§

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

Converts to this type from the input type.

## Auto Trait Implementations§

§

### impl<'data> RefUnwindSafe for BorrowedBuf<'data>

§

### impl<'data> Send for BorrowedBuf<'data>

§

### impl<'data> Sync for BorrowedBuf<'data>

§

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

§

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

## Blanket Implementations§

source§

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

source§

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

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

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

source§

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

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere U: Into<T>,

§

#### 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 Twhere U: TryFrom<T>,

§

#### 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.