pub struct Cursor<T> { /* private fields */ }Expand description
A Cursor wraps an in-memory buffer and provides it with a
AsyncSeek implementation.
Cursors are used with in-memory buffers, anything implementing
AsRef<[u8]>, to allow them to implement AsyncRead and/or AsyncWrite,
allowing these buffers to be used anywhere you might use a reader or writer
that does actual I/O.
This library implements some I/O traits on various types which
are commonly used as a buffer, like Cursor<Vec<u8>> and
Cursor<&[u8]>.
Implementations§
Source§impl<T> Cursor<T>
 
impl<T> Cursor<T>
Sourcepub fn new(inner: T) -> Cursor<T>
 
pub 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.
§Examples
use futures::io::Cursor;
let buff = Cursor::new(Vec::new());Sourcepub fn into_inner(self) -> T
 
pub fn into_inner(self) -> T
Consumes this cursor, returning the underlying value.
§Examples
use futures::io::Cursor;
let buff = Cursor::new(Vec::new());
let vec = buff.into_inner();Sourcepub fn get_ref(&self) -> &T
 
pub fn get_ref(&self) -> &T
Gets a reference to the underlying value in this cursor.
§Examples
use futures::io::Cursor;
let buff = Cursor::new(Vec::new());
let reference = buff.get_ref();Sourcepub fn get_mut(&mut self) -> &mut T
 
pub 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.
§Examples
use futures::io::Cursor;
let mut buff = Cursor::new(Vec::new());
let reference = buff.get_mut();Sourcepub fn position(&self) -> u64
 
pub fn position(&self) -> u64
Returns the current position of this cursor.
§Examples
use futures::io::{AsyncSeekExt, Cursor, SeekFrom};
let mut buff = Cursor::new(vec![1, 2, 3, 4, 5]);
assert_eq!(buff.position(), 0);
buff.seek(SeekFrom::Current(2)).await?;
assert_eq!(buff.position(), 2);
buff.seek(SeekFrom::Current(-1)).await?;
assert_eq!(buff.position(), 1);Sourcepub fn set_position(&mut self, pos: u64)
 
pub fn set_position(&mut self, pos: u64)
Sets the position of this cursor.
§Examples
use futures::io::Cursor;
let mut buff = Cursor::new(vec![1, 2, 3, 4, 5]);
assert_eq!(buff.position(), 0);
buff.set_position(2);
assert_eq!(buff.position(), 2);
buff.set_position(4);
assert_eq!(buff.position(), 4);Trait Implementations§
Source§impl<T> AsyncBufRead for Cursor<T>
 
impl<T> AsyncBufRead for Cursor<T>
Source§impl<T> AsyncRead for Cursor<T>
 
impl<T> AsyncRead for Cursor<T>
Source§impl AsyncWrite for Cursor<&mut [u8]>
 
impl AsyncWrite for Cursor<&mut [u8]>
Source§fn poll_write(
    self: Pin<&mut Cursor<&mut [u8]>>,
    _: &mut Context<'_>,
    buf: &[u8],
) -> Poll<Result<usize, Error>>
 
fn poll_write( self: Pin<&mut Cursor<&mut [u8]>>, _: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
buf into the object. Read moreSource§fn poll_write_vectored(
    self: Pin<&mut Cursor<&mut [u8]>>,
    _: &mut Context<'_>,
    bufs: &[IoSlice<'_>],
) -> Poll<Result<usize, Error>>
 
fn poll_write_vectored( self: Pin<&mut Cursor<&mut [u8]>>, _: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>
bufs into the object using vectored
IO operations. Read moreSource§impl AsyncWrite for Cursor<&mut Vec<u8>>
 
impl AsyncWrite for Cursor<&mut Vec<u8>>
Source§fn poll_write(
    self: Pin<&mut Cursor<&mut Vec<u8>>>,
    _: &mut Context<'_>,
    buf: &[u8],
) -> Poll<Result<usize, Error>>
 
fn poll_write( self: Pin<&mut Cursor<&mut Vec<u8>>>, _: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
buf into the object. Read moreSource§fn poll_write_vectored(
    self: Pin<&mut Cursor<&mut Vec<u8>>>,
    _: &mut Context<'_>,
    bufs: &[IoSlice<'_>],
) -> Poll<Result<usize, Error>>
 
fn poll_write_vectored( self: Pin<&mut Cursor<&mut Vec<u8>>>, _: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>
bufs into the object using vectored
IO operations. Read moreSource§impl AsyncWrite for Cursor<Box<[u8]>>
 
impl AsyncWrite for Cursor<Box<[u8]>>
Source§fn poll_write(
    self: Pin<&mut Cursor<Box<[u8]>>>,
    _: &mut Context<'_>,
    buf: &[u8],
) -> Poll<Result<usize, Error>>
 
fn poll_write( self: Pin<&mut Cursor<Box<[u8]>>>, _: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
buf into the object. Read moreSource§fn poll_write_vectored(
    self: Pin<&mut Cursor<Box<[u8]>>>,
    _: &mut Context<'_>,
    bufs: &[IoSlice<'_>],
) -> Poll<Result<usize, Error>>
 
fn poll_write_vectored( self: Pin<&mut Cursor<Box<[u8]>>>, _: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>
bufs into the object using vectored
IO operations. Read moreSource§impl AsyncWrite for Cursor<Vec<u8>>
 
impl AsyncWrite for Cursor<Vec<u8>>
Source§fn poll_write(
    self: Pin<&mut Cursor<Vec<u8>>>,
    _: &mut Context<'_>,
    buf: &[u8],
) -> Poll<Result<usize, Error>>
 
fn poll_write( self: Pin<&mut Cursor<Vec<u8>>>, _: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
buf into the object. Read moreSource§fn poll_write_vectored(
    self: Pin<&mut Cursor<Vec<u8>>>,
    _: &mut Context<'_>,
    bufs: &[IoSlice<'_>],
) -> Poll<Result<usize, Error>>
 
fn poll_write_vectored( self: Pin<&mut Cursor<Vec<u8>>>, _: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>
bufs into the object using vectored
IO operations. Read moreAuto 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> UnwindSafe for Cursor<T>where
    T: UnwindSafe,
Blanket Implementations§
Source§impl<R> AsyncBufReadExt for Rwhere
    R: AsyncBufRead + ?Sized,
 
impl<R> AsyncBufReadExt for Rwhere
    R: AsyncBufRead + ?Sized,
Source§fn fill_buf(&mut self) -> FillBuf<'_, Self> ⓘwhere
    Self: Unpin,
 
fn fill_buf(&mut self) -> FillBuf<'_, Self> ⓘwhere
    Self: Unpin,
Source§fn consume_unpin(&mut self, amt: usize)where
    Self: Unpin,
 
fn consume_unpin(&mut self, amt: usize)where
    Self: Unpin,
Source§fn read_until<'a>(
    &'a mut self,
    byte: u8,
    buf: &'a mut Vec<u8>,
) -> ReadUntil<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_until<'a>(
    &'a mut self,
    byte: u8,
    buf: &'a mut Vec<u8>,
) -> ReadUntil<'a, Self> ⓘwhere
    Self: Unpin,
buf until the delimiter byte or EOF is reached.
This method is the async equivalent to BufRead::read_until. Read moreSource§fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> ⓘwhere
    Self: Unpin,
buf until a newline (the 0xA byte) or EOF is reached,
This method is the async equivalent to BufRead::read_line. Read moreSource§impl<R> AsyncReadExt for R
 
impl<R> AsyncReadExt for R
Source§fn chain<R>(self, next: R) -> Chain<Self, R>
 
fn chain<R>(self, next: R) -> Chain<Self, R>
Source§fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> ⓘwhere
    Self: Unpin,
buf in asynchronous
manner, returning a future type. Read moreSource§fn read_vectored<'a>(
    &'a mut self,
    bufs: &'a mut [IoSliceMut<'a>],
) -> ReadVectored<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_vectored<'a>(
    &'a mut self,
    bufs: &'a mut [IoSliceMut<'a>],
) -> ReadVectored<'a, Self> ⓘwhere
    Self: Unpin,
AsyncRead into bufs using vectored
IO operations. Read moreSource§fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> ⓘwhere
    Self: Unpin,
buf,
returning an error if end of file (EOF) is hit sooner. Read moreSource§fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self> ⓘwhere
    Self: Unpin,
AsyncRead. Read moreSource§fn read_to_string<'a>(
    &'a mut self,
    buf: &'a mut String,
) -> ReadToString<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_to_string<'a>(
    &'a mut self,
    buf: &'a mut String,
) -> ReadToString<'a, Self> ⓘwhere
    Self: Unpin,
AsyncRead. Read moreSource§impl<S> AsyncSeekExt for S
 
impl<S> AsyncSeekExt for S
Source§impl<W> AsyncWriteExt for Wwhere
    W: AsyncWrite + ?Sized,
 
impl<W> AsyncWriteExt for Wwhere
    W: AsyncWrite + ?Sized,
Source§fn flush(&mut self) -> Flush<'_, Self> ⓘwhere
    Self: Unpin,
 
fn flush(&mut self) -> Flush<'_, Self> ⓘwhere
    Self: Unpin,
AsyncWrite. Read moreSource§fn close(&mut self) -> Close<'_, Self> ⓘwhere
    Self: Unpin,
 
fn close(&mut self) -> Close<'_, Self> ⓘwhere
    Self: Unpin,
AsyncWrite.Source§fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self> ⓘwhere
    Self: Unpin,
 
fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self> ⓘwhere
    Self: Unpin,
buf into the object. Read moreSource§fn write_vectored<'a>(
    &'a mut self,
    bufs: &'a [IoSlice<'a>],
) -> WriteVectored<'a, Self> ⓘwhere
    Self: Unpin,
 
fn write_vectored<'a>(
    &'a mut self,
    bufs: &'a [IoSlice<'a>],
) -> WriteVectored<'a, Self> ⓘwhere
    Self: Unpin,
bufs into the object using vectored
IO operations. Read moreSource§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T> FmtForward for T
 
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
 
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
 
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
 
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
 
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
 
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
 
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
 
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
 
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> FuturesAsyncReadCompatExt for Twhere
    T: AsyncRead,
 
impl<T> FuturesAsyncReadCompatExt for Twhere
    T: AsyncRead,
Source§impl<T> FuturesAsyncWriteCompatExt for Twhere
    T: AsyncWrite,
 
impl<T> FuturesAsyncWriteCompatExt for Twhere
    T: AsyncWrite,
Source§fn compat_write(self) -> Compat<Self>where
    Self: Sized,
 
fn compat_write(self) -> Compat<Self>where
    Self: Sized,
self with a compatibility layer that implements
tokio::io::AsyncWrite.Source§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
 
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R,
) -> R
 
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
 
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
 
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
 
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
 
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
 
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.