Struct microcrates_bytes::buf::Cursor [] [src]

pub struct Cursor<T> { /* fields omitted */ }

io::Cursor type from std vendored for use in no_std environments

A Cursor wraps another type and provides it with a Seek implementation.

Cursors are typically used with in-memory buffers 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.

The standard library implements some I/O traits on various types which are commonly used as a buffer, like Cursor<Vec<u8>> and Cursor<&[u8]>.

Examples

We may want to write bytes to a File in our production code, but use an in-memory buffer in our tests. We can do this with Cursor:

use std::io::prelude::*;
use std::io::{self, SeekFrom};
use std::fs::File;

// a library function we've written
fn write_ten_bytes_at_end<W: Write + Seek>(writer: &mut W) -> io::Result<()> {
    writer.seek(SeekFrom::End(-10))?;

    for i in 0..10 {
        writer.write(&[i])?;
    }

    // all went well
    Ok(())
}

// Here's some code that uses this library function.
//
// We might want to use a BufReader here for efficiency, but let's
// keep this example focused.
let mut file = File::create("foo.txt")?;

write_ten_bytes_at_end(&mut file)?;

// now let's write a test
#[test]
fn test_writes_bytes() {
    // setting up a real File is much slower than an in-memory buffer,
    // let's use a cursor instead
    use std::io::Cursor;
    let mut buff = Cursor::new(vec![0; 15]);

    write_ten_bytes_at_end(&mut buff).unwrap();

    assert_eq!(&buff.get_ref()[5..15], &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
}

Methods

impl<T> Cursor<T>
[src]

[src]

Creates a new cursor wrapping the provided underlying I/O object.

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

Examples

use std::io::Cursor;

let buff = Cursor::new(Vec::new());

[src]

Consumes this cursor, returning the underlying value.

Examples

use std::io::Cursor;

let buff = Cursor::new(Vec::new());

let vec = buff.into_inner();

[src]

Gets a reference to the underlying value in this cursor.

Examples

use std::io::Cursor;

let buff = Cursor::new(Vec::new());

let reference = buff.get_ref();

[src]

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 std::io::Cursor;

let mut buff = Cursor::new(Vec::new());

let reference = buff.get_mut();

[src]

Returns the current position of this cursor.

Examples

use std::io::Cursor;
use std::io::prelude::*;
use std::io::SeekFrom;

let mut buff = Cursor::new(vec![1, 2, 3, 4, 5]);

assert_eq!(buff.position(), 0);

buff.seek(SeekFrom::Current(2)).unwrap();
assert_eq!(buff.position(), 2);

buff.seek(SeekFrom::Current(-1)).unwrap();
assert_eq!(buff.position(), 1);

[src]

Sets the position of this cursor.

Examples

use std::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

impl<T: AsRef<[u8]>> Buf for Cursor<T>
[src]

[src]

Returns the number of bytes between the current position and the end of the buffer. Read more

[src]

Returns a slice starting at the current position and of length between 0 and Buf::remaining(). Read more

[src]

Advance the internal cursor of the Buf Read more

[src]

Returns true if there are any more bytes to consume Read more

[src]

Copies bytes from self into dst. Read more

[src]

Gets an unsigned 8 bit integer from self. Read more

[src]

Gets a signed 8 bit integer from self. Read more

[src]

Gets an unsigned 16 bit integer from self in the specified byte order. Read more

[src]

Gets a signed 16 bit integer from self in the specified byte order. Read more

[src]

Gets an unsigned 32 bit integer from self in the specified byte order. Read more

[src]

Gets a signed 32 bit integer from self in the specified byte order. Read more

[src]

Gets an unsigned 64 bit integer from self in the specified byte order. Read more

[src]

Gets a signed 64 bit integer from self in the specified byte order. Read more

[src]

Gets an unsigned n-byte integer from self in the specified byte order. Read more

[src]

Gets a signed n-byte integer from self in the specified byte order. Read more

[src]

Gets an IEEE754 single-precision (4 bytes) floating point number from self in the specified byte order. Read more

[src]

Gets an IEEE754 double-precision (8 bytes) floating point number from self in the specified byte order. Read more

[src]

Transforms a Buf into a concrete buffer. Read more

[src]

Creates an adaptor which will read at most limit bytes from self. Read more

[src]

Creates an adaptor which will chain this buffer with another. Read more

[src]

Creates a "by reference" adaptor for this instance of Buf. Read more

[src]

Creates an adaptor which implements the Read trait for self. Read more

[src]

Returns an iterator over the bytes contained by the buffer. Read more

impl<T: AsMut<[u8]> + AsRef<[u8]>> BufMut for Cursor<T>
[src]

[src]

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

[src]

Advance the internal cursor of the BufMut

[src]

Returns a mutable slice starting at the current BufMut position and of length between 0 and BufMut::remaining().

The returned byte slice may represent uninitialized memory.

[src]

Returns true if there is space in self for more bytes. Read more

[src]

Transfer bytes into self from src and advance the cursor by the number of bytes written. Read more

[src]

Transfer bytes into self from src and advance the cursor by the number of bytes written. Read more

[src]

Writes an unsigned 8 bit integer to self. Read more

[src]

Writes a signed 8 bit integer to self. Read more

[src]

Writes an unsigned 16 bit integer to self in the specified byte order. Read more

[src]

Writes a signed 16 bit integer to self in the specified byte order. Read more

[src]

Writes an unsigned 32 bit integer to self in the specified byte order. Read more

[src]

Writes a signed 32 bit integer to self in the specified byte order. Read more

[src]

Writes an unsigned 64 bit integer to self in the specified byte order. Read more

[src]

Writes a signed 64 bit integer to self in the specified byte order. Read more

[src]

Writes an unsigned n-byte integer to self in the specified byte order. Read more

[src]

Writes a signed n-byte integer to self in the specified byte order. Read more

[src]

Writes an IEEE754 single-precision (4 bytes) floating point number to self in the specified byte order. Read more

[src]

Writes an IEEE754 double-precision (8 bytes) floating point number to self in the specified byte order. Read more

[src]

Creates a "by reference" adaptor for this instance of BufMut. Read more

[src]

Creates an adaptor which implements the Write trait for self. Read more

impl<T: Clone> Clone for Cursor<T>
[src]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl<T: Debug> Debug for Cursor<T>
[src]

[src]

Formats the value using the given formatter.