Struct protocol::wire::Reader[][src]

pub struct Reader { /* fields omitted */ }

A receive buffer that waits until enough data is ready and then returns the parsed parcels.

This mechanism can be used to send parcels without length prefixes.

Adding data to the receive buffer

Reader implements std::io::Write. Any bytes written to the reader are added to the receive queue for future processing.

Example

This example shows a reader only returning a u32 once enough data has been buffered.

use protocol;
use std::io::Write;

let mut reader = protocol::wire::Reader::new();
let settings = protocol::Settings::default();

// No bytes received yet.
assert_eq!(None, reader.poll::<u32>(&settings).unwrap());

// Two bytes received.
reader.write(&[0xff, 0x00]).unwrap();
assert_eq!(None, reader.poll::<u32>(&settings).unwrap());

// Three bytes received.
reader.write(&[0x00]).unwrap();
assert_eq!(None, reader.poll::<u32>(&settings).unwrap());

// All four bytes received.
reader.write(&[0x00]).unwrap();
assert_eq!(Some(0xff000000), reader.poll::<u32>(&settings).unwrap());

Implementations

impl Reader[src]

pub fn new() -> Self[src]

Creates a new parcel reader.

pub fn poll<P>(&mut self, settings: &Settings) -> Result<Option<P>, Error> where
    P: Parcel
[src]

Polls the reader for a value.

Returns Ok(None) if further data must be received in order to interpret the value.

Returns Ok(Some(value)) if the value is ready to be read from the stream.

Returns Err(e) on error.

Trait Implementations

impl Debug for Reader[src]

impl Default for Reader[src]

impl Write for Reader[src]

Auto Trait Implementations

Blanket Implementations

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

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

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

impl<T> From<T> for T[src]

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

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

The type returned in the event of a conversion error.

impl<W> WriteBytesExt for W where
    W: Write + ?Sized
[src]