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 Apache License, Version 2.0, (LICENSE.txt or http://www.apache.org/licenses/LICENSE-2.0).
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 licensed as above, without any additional terms or conditions.