#pipe #serialization #serde

serde_pipe

Turn serde+bincode into a pipe: push Ts and pull u8s, or vice versa. 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

3 releases

0.1.3 Jul 26, 2019
0.1.2 Jul 26, 2019
0.1.1 Jul 25, 2019
0.1.0 Oct 16, 2018

#1430 in Encoding

40 downloads per month
Used in 2 crates (via constellation-rs)

MIT/Apache

47KB
1.5K SLoC

serde_pipe

Crates.io MIT / Apache 2.0 licensed Build Status

Docs

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

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.

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~365–650KB
~15K SLoC