Turn serde+bincode into a pipe: push T
s and pull u8
s, or vice versa.
This library gives you a Serializer
pipe, into which you can push T
s and pull u8
s; and a Deserializer
pipe, into which you can push u8
s and pull T
s.
Both are bounded in their memory usage, i.e. they do not simply allocate a vector for serde+bincode to serialize into. Instead, libfringe is leveraged to turn serde+bincode into a Generator from which u8
s can be pulled from/pushed to on demand.
This is useful for example if you have 10GiB memory available, and want to serialize+send or receive+deserialize an 8GiB vector. Note, this is perfectly possible with serde+bincode normally, but you'd need to dedicate a thread that blocks until completion to the task.
```rust extern crate serdepipe; use serdepipe::Serializer;
let largevector = (0..1u64<<30).collect::
while let Some(pull) = serializer.pull() { let byte = pull(); println!("byte! {}", byte); } ```
This crate currently depends on libfringe, and as such 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.
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.