# Struct std::io::BorrowedCursor

source ·

    pub struct BorrowedCursor<'a> { /* private fields */ }

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

A writeable view of the unfilled portion of a `BorrowedBuf`.

Provides access to the initialized and uninitialized parts of the underlying `BorrowedBuf`. Data can be written directly to the cursor by using `append` or indirectly by getting a slice of part or all of the cursor and writing into the slice. In the indirect case, the caller must call `advance` after writing to inform the cursor how many bytes have been written.

Once data is written to the cursor, it becomes part of the filled portion of the underlying `BorrowedBuf` and can no longer be accessed or re-written by the cursor. I.e., the cursor tracks the unfilled part of the underlying `BorrowedBuf`.

The lifetime `'a` is a bound on the lifetime of the underlying buffer (which means it is a bound on the data in that buffer by transitivity).

## Implementations§

source§

### impl<'a> BorrowedCursor<'a>

source

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

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

Reborrow this cursor by cloning it with a smaller lifetime.

Since a cursor maintains unique access to its underlying buffer, the borrowed cursor is not accessible while the new cursor exists.

source

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

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

Returns the available space in the cursor.

source

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

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

Returns the number of bytes written to this cursor since it was created from a `BorrowedBuf`.

Note that if this cursor is a reborrowed clone of another, then the count returned is the count written via either cursor, not the count since the cursor was reborrowed.

source

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

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

Returns a shared reference to the initialized portion of the cursor.

source

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

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

Returns a mutable reference to the initialized portion of the cursor.

source

#### pub fn uninit_mut(&mut self) -> &mut [MaybeUninit<u8>]

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

Returns a mutable reference to the uninitialized part of the cursor.

It is safe to uninitialize any of these bytes.

source

#### pub unsafe fn as_mut(&mut self) -> &mut [MaybeUninit<u8>]

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

Returns a mutable reference to the whole cursor.

##### Safety

The caller must not uninitialize any bytes in the initialized portion of the cursor.

source

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

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

Advance the cursor by asserting that `n` bytes have been filled.

After advancing, the `n` bytes are no longer accessible via the cursor and can only be accessed via the underlying buffer. I.e., the buffer’s filled portion grows by `n` elements and its unfilled portion (and the capacity of this cursor) shrinks by `n` elements.

##### Safety

The caller must ensure that the first `n` bytes of the cursor have been properly initialised.

source

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

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

Initializes all bytes in the cursor.

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` unfilled bytes of the cursor 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` bytes of the buffer have already been initialized.

source

#### pub fn append(&mut self, buf: &[u8])

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

Appends data to the cursor, advancing position within its buffer.

##### Panics

Panics if `self.capacity()` is less than `buf.len()`.

## Trait Implementations§

source§

### impl<'a> Debug for BorrowedCursor<'a>

source§

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

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

### impl<'a> Write for BorrowedCursor<'a>

source§

#### fn write(&mut self, buf: &[u8]) -> Result<usize>

Write a buffer into this writer, returning how many bytes were written. Read more
source§

#### fn flush(&mut self) -> Result<()>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · source§

#### fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize>

Like `write`, except that it writes from a slice of buffers. Read more
source§

#### fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (`can_vector` #69941)
Determines if this `Write`r has an efficient `write_vectored` implementation. Read more
1.0.0 · source§

#### fn write_all(&mut self, buf: &[u8]) -> Result<()>

Attempts to write an entire buffer into this writer. Read more
source§

#### fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>

🔬This is a nightly-only experimental API. (`write_all_vectored` #70436)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · source§

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

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · source§

#### fn by_ref(&mut self) -> &mut Self where Self: Sized,

Creates a “by reference” adapter for this instance of `Write`. Read more

## Auto Trait Implementations§

§

### impl<'a> RefUnwindSafe for BorrowedCursor<'a>

§

### impl<'a> Send for BorrowedCursor<'a>

§

### impl<'a> Sync for BorrowedCursor<'a>

§

### impl<'a> Unpin for BorrowedCursor<'a>

§

### impl<'a> !UnwindSafe for BorrowedCursor<'a>

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