Skip to main content

Cursor

Struct Cursor 

Source
pub struct Cursor<T> { /* private fields */ }
Expand description

A Cursor wraps an in-memory buffer and provides it with a Seek implementation.

Cursors are used with in-memory buffers, anything implementing AsRef<[u8]>, to allow them to implement Read and/or Write, allowing these buffers to be used anywhere you might use a reader or writer that does actual I/O.

Implementations§

Source§

impl<T> Cursor<T>

Source

pub const fn new(inner: T) -> Cursor<T>

Creates a new cursor wrapping the provided underlying in-memory buffer.

Cursor initial position is 0 even if underlying buffer (e.g., Vec) is not empty. So writing to cursor starts with overwriting Vec content, not with appending to it.

Source

pub fn into_inner(self) -> T

Consumes this cursor, returning the underlying value.

Source

pub const fn get_ref(&self) -> &T

Gets a reference to the underlying value in this cursor.

Source

pub const fn get_mut(&mut self) -> &mut T

Gets a mutable reference to the underlying value in this cursor.

Care should be taken to avoid modifying the internal I/O state of the underlying value as it may corrupt this cursor’s position.

Source

pub const fn position(&self) -> u64

Returns the current position of this cursor.

Source

pub const fn set_position(&mut self, pos: u64)

Sets the position of this cursor.

Source§

impl<T> Cursor<T>
where T: AsRef<[u8]>,

Source

pub fn split(&self) -> (&[u8], &[u8])

Splits the underlying slice at the cursor position and returns them.

Source§

impl<T> Cursor<T>
where T: AsMut<[u8]>,

Source

pub fn split_mut(&mut self) -> (&mut [u8], &mut [u8])

Splits the underlying slice at the cursor position and returns them mutably.

Trait Implementations§

Source§

impl<T> BufRead for Cursor<T>
where T: AsRef<[u8]>,

Source§

fn fill_buf(&mut self) -> Result<&[u8]>

Returns the contents of the internal buffer, filling it with more data, via Read methods, if empty.
Source§

fn consume(&mut self, amt: usize)

Marks the given amount of additional bytes from the internal buffer as having been read. Subsequent calls to read only return bytes that have not been marked as read.
Source§

fn has_data_left(&mut self) -> Result<bool>

Checks if there is any data left to be read.
Source§

fn skip_until(&mut self, byte: u8) -> Result<usize>

Skips all bytes until the delimiter byte or EOF is reached.
Source§

impl<T> Clone for Cursor<T>
where T: Clone,

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
Source§

fn clone_from(&mut self, other: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for Cursor<T>

Source§

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

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

impl<T: Default> Default for Cursor<T>

Source§

fn default() -> Cursor<T>

Returns the “default value” for a type. Read more
Source§

impl<T: IoBuf> IoBuf for Cursor<T>

Source§

fn remaining(&self) -> usize

Returns the number of bytes between the current position and the end of the buffer.
Source§

fn is_empty(&self) -> bool

Returns true if there are no remaining bytes in the buffer.
Source§

impl<T: IoBufMut> IoBufMut for Cursor<T>

Source§

fn remaining_mut(&self) -> usize

Returns the number of bytes that can be written from the current position until the end of the buffer is reached.
Source§

fn is_full(&self) -> bool

Returns true if there is no remaining space in the buffer.
Source§

impl<T: PartialEq> PartialEq for Cursor<T>

Source§

fn eq(&self, other: &Cursor<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Read for Cursor<T>
where T: AsRef<[u8]>,

Source§

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

Pull some bytes from this source into the specified buffer, returning how many bytes were read.
Source§

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

Read the exact number of bytes required to fill buf.
Source§

fn read_buf(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>

Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>

Reads the exact number of bytes required to fill cursor. Read more
Source§

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

Creates a “by reference” adapter for this instance of Read. Read more
Source§

fn chain<R: Read>(self, next: R) -> Chain<Self, R>
where Self: Sized,

Creates an adapter which will chain this stream with another. Read more
Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

impl<T> Seek for Cursor<T>
where T: AsRef<[u8]>,

Source§

fn seek(&mut self, style: SeekFrom) -> Result<u64>

Seek to an offset, in bytes, in a stream. Read more
Source§

fn stream_len(&mut self) -> Result<u64>

Returns the length of this stream (in bytes).
Source§

fn stream_position(&mut self) -> Result<u64>

Returns the current seek position from the start of the stream. Read more
Source§

fn rewind(&mut self) -> Result<()>

Rewind to the beginning of a stream. Read more
Source§

fn seek_relative(&mut self, offset: i64) -> Result<()>

Seeks relative to the current position.
Source§

impl Write for Cursor<&mut [u8]>

Source§

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

Write a buffer into this writer, returning how many bytes were written.
Source§

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

Attempts to write an entire buffer into this writer.
Source§

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

Flush this output stream, ensuring that all intermediately buffered contents reach their destination.
Source§

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

Writes a formatted string into this writer, returning any error encountered.
Source§

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

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

impl<const N: usize> Write for Cursor<[u8; N]>

Source§

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

Write a buffer into this writer, returning how many bytes were written.
Source§

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

Attempts to write an entire buffer into this writer.
Source§

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

Flush this output stream, ensuring that all intermediately buffered contents reach their destination.
Source§

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

Writes a formatted string into this writer, returning any error encountered.
Source§

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

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

impl<T: Eq> Eq for Cursor<T>

Source§

impl<T> StructuralPartialEq for Cursor<T>

Auto Trait Implementations§

§

impl<T> Freeze for Cursor<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Cursor<T>
where T: RefUnwindSafe,

§

impl<T> Send for Cursor<T>
where T: Send,

§

impl<T> Sync for Cursor<T>
where T: Sync,

§

impl<T> Unpin for Cursor<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Cursor<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Cursor<T>
where T: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> IoBufExt for T
where T: Read + IoBuf + ?Sized,

Source§

fn write_to<W: Write + ?Sized>(&mut self, writer: &mut W) -> Result<usize>

Reads some bytes from this buffer and writes them into writer.
Source§

impl<T> IoBufMutExt for T
where T: Write + IoBufMut + ?Sized,

Source§

fn read_from<R: Read + ?Sized>(&mut self, reader: &mut R) -> Result<usize>

Reads some bytes from reader and writes them into this buffer.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.