3 releases
0.1.3 | Jul 26, 2019 |
---|---|
0.1.2 |
|
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)
47KB
1.5K
SLoC
serde_pipe
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.
This by default works by allocating a vector to hold the intermediate u8
s. 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
andnaked_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
- Apache License, Version 2.0, (LICENSE-APACHE.txt or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT.txt or http://opensource.org/licenses/MIT)
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