[][src]Struct iowrap::Eof

pub struct Eof<R: Read> { /* fields omitted */ }

Track whether a stream has hit the end of file.

This allows slightly nicer code when reading lots of items using an uncooperative api, or when you want an UnexpectedEof only after the first byte. It also simplifies determining the last chunk when processing input in fixed-size chunks.

Eof::eof() and – for consistency – the Read implementation of Eof ignore ErrorKind::Interrupted errors and retry the operation.

Example

use std::io;
use std::io::Read;
use std::fs::File;
use iowrap::Eof;

fn load() -> io::Result<Vec<u64>> {
  let mut ret = Vec::new();
  let mut file = Eof::new(File::open("foo.bin")?);
  while !file.eof()? {
    ret.push(third_party::parse_thing(&mut file));
  }
  Ok(ret)
}

mod third_party {
  use std::io::Read;
  pub fn parse_thing<R: Read>(mut from: R) -> u64 {
    let mut buf = [0u8; 8];
    from.read_exact(&mut buf).unwrap();
    u64::from(buf[0]) // oops!
  }
}

Methods

impl<R: Read> Eof<R>
[src]

pub fn new(inner: R) -> Self
[src]

pub fn eof(&mut self) -> Result<bool>
[src]

Test if we are at the end of the stream. If false, then a proceeding read() will always succeed.

pub fn held_state(&self) -> Option<u8>
[src]

The buffered value, which we read while checking for EOF.

pub fn get_ref(&self) -> &R
[src]

pub fn get_mut(&mut self) -> &mut R
[src]

pub fn into_inner(self) -> R
[src]

Trait Implementations

impl<R: Read> Read for Eof<R>
[src]

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

For consistency with eof(), this implementation retries the operation on ErrorKind::Interrupted errors.

unsafe fn initializer(&self) -> Initializer
[src]

🔬 This is a nightly-only experimental API. (read_initializer)

Determines if this Reader can work with buffers of uninitialized memory. Read more

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
1.0.0
[src]

Read all bytes until EOF in this source, placing them into buf. Read more

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
1.0.0
[src]

Read all bytes until EOF in this source, appending them to buf. Read more

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

Read the exact number of bytes required to fill buf. Read more

fn by_ref(&mut self) -> &mut Self
1.0.0
[src]

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

fn bytes(self) -> Bytes<Self>
1.0.0
[src]

Transforms this Read instance to an [Iterator] over its bytes. Read more

fn chain<R>(self, next: R) -> Chain<Self, R> where
    R: Read
1.0.0
[src]

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

fn take(self, limit: u64) -> Take<Self>
1.0.0
[src]

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

Auto Trait Implementations

impl<R> Send for Eof<R> where
    R: Send

impl<R> Sync for Eof<R> where
    R: Sync

Blanket Implementations

impl<T> From for T
[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]