[][src]Crate serde_pipe

Turn serde+bincode into a pipe: push Ts and pull u8s, or vice versa.

Crates.ioRepo

This library gives you a Serializer pipe, into which you can push Ts and pull u8s; and a Deserializer pipe, into which you can push u8s and pull Ts.

This by default works by allocating a vector to hold the intermediate u8s. However the fringe feature can be enabled, which uses libfringe to turn serde+bincode into a Generator, resulting in bounded memory usage.

Example

use serde_pipe::Serializer;

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

while let Some(pull) = serializer.pull() {
	let byte = pull();
	println!("byte! {}", byte);
}

Note

The fringe feature depends on libfringe, and so enabling it inherits these limitations:

  • Rust nightly is required for the asm and naked_functions features;
  • The architectures currently supported are: x86, x86_64, aarch64, or1k;
  • The platforms currently supported are: bare metal, Linux (any libc), FreeBSD, DragonFly BSD, macOS. Windows is not supported.

Structs

Deserializer

Deserializer pipe: push u8; pull T.

Serializer

Serializer pipe: push T; pull u8.