[][src]Struct serde_pipe::Deserializer

pub struct Deserializer { /* fields omitted */ }

Deserializer pipe: push u8; pull T.

You will not be able to push any u8 until Deserializer::pull::<T>() has been called to specify the type to be deserialized to.

The push and pull calls can signify "blocking" – i.e. they're awaiting the other call – by returning None.

A Some returned signifies readiness, holding an impl FnOnce that you can call to perform the push/pull.

Example

use serde_pipe::{Serializer,Deserializer};

let large_vector = (0..1u64<<10).collect::<Vec<_>>();
let mut serializer = Serializer::new();
serializer.push().unwrap()(large_vector);

let mut deserializer = Deserializer::new();
deserializer.pull::<Vec<u64>>();

while let Some(pull) = serializer.pull() {
	let byte = pull();
	deserializer.push().unwrap()(byte);
}

let large_vector = deserializer.pull::<Vec<u64>>().unwrap()();

Panics

Will panic if dropped while non-empty. In practise this almost always signifies a bug. If you do want to drop it when non-empty, call Deserializer::empty() before dropping it.

Methods

impl Deserializer[src]

pub fn new() -> Self[src]

Construct a new Deserializer pipe.

pub fn pull<'a, T: DeserializeOwned + 'static>(
    &'a mut self
) -> Option<impl FnOnce() -> T + 'a>
[src]

Pull a T from the Deserializer pipe. None denotes that the Deserializer is instead awaiting a push. Some contains an impl FnOnce() -> T that can be called to perform the pull.

Note that push will return None until pull has been called, as it's necessary to supply the type of the value being seserialized.

pub fn push<'a>(&'a mut self) -> Option<impl FnOnce(u8) + 'a>[src]

Push a u8 to the Deserializer pipe. None denotes that the Deserializer is instead awaiting a pull. Some contains an impl FnOnce(u8) that can be called to perform the push.

Note that push will return None until pull has been called, as it's necessary to supply the type of the value being seserialized.

pub fn empty<'a>(&'a mut self) -> Option<impl FnOnce() + 'a>[src]

Empty this pipe. None denotes it's already empty. Some contains an impl FnOnce() that can be called to perform the empty.

Trait Implementations

impl Drop for Deserializer[src]

impl Debug for Deserializer[src]

Auto Trait Implementations

Blanket Implementations

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<T> BorrowMut<T> for T where
    T: ?Sized
[src]

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

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