Struct bao::encode::Writer [−][src]
An incremental encoder. Note that you must call finish
after you're done writing.
Writer
supports both combined and outboard encoding, depending on which constructor you use.
Writer
is currently only available when std
is enabled, because std::io::Write
is a
required part of its interface. However, it could be extended to support no_std
-compatible
traits outside of the standard library too. Please reach out to me if you need that.
This implementation is single-threaded.
Example
use std::io::prelude::*; let mut encoded_incrementally = Vec::new(); let encoded_cursor = std::io::Cursor::new(&mut encoded_incrementally); let mut encoder = bao::encode::Writer::new(encoded_cursor); encoder.write_all(b"some input")?; encoder.finish()?;
Methods
impl<T: Read + Write + Seek> Writer<T>
[src]
impl<T: Read + Write + Seek> Writer<T>
pub fn new(inner: T) -> Self
[src]
pub fn new(inner: T) -> Self
Create a new Writer
that will produce a combined encoding.The encoding will contain all
the input bytes, so that it can be decoded without the original input file. This is what
you get from bao encode
.
pub fn new_outboard(inner: T) -> Self
[src]
pub fn new_outboard(inner: T) -> Self
Create a new Writer
for making an outboard encoding. That means that the encoding won't
include any input bytes. Instead, the input will need to be supplied as a separate argument
when the outboard encoding is later decoded. This is what you get from bao encode --outboard
.
pub fn finish(&mut self) -> Result<Hash>
[src]
pub fn finish(&mut self) -> Result<Hash>
Finalize the encoding, after all the input has been written. You can't use this type again
after calling finish
.
The underlying strategy of the Writer
is to first store the tree in a post-order layout,
and then to go back and flip the entire thing into pre-order. That makes it possible to
stream input without knowing its length in advance, which is a core requirement of the
std::io::Write
interface. The downside is that finish
is a relatively expensive step.
Trait Implementations
impl<T: Clone + Read + Write + Seek> Clone for Writer<T>
[src]
impl<T: Clone + Read + Write + Seek> Clone for Writer<T>
ⓘImportant traits for Writer<T>fn clone(&self) -> Writer<T>
[src]
fn clone(&self) -> Writer<T>
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl<T: Debug + Read + Write + Seek> Debug for Writer<T>
[src]
impl<T: Debug + Read + Write + Seek> Debug for Writer<T>
fn fmt(&self, f: &mut Formatter) -> Result
[src]
fn fmt(&self, f: &mut Formatter) -> Result
Formats the value using the given formatter. Read more
impl<T: Read + Write + Seek> Write for Writer<T>
[src]
impl<T: Read + Write + Seek> Write for Writer<T>
fn write(&mut self, buf: &[u8]) -> Result<usize>
[src]
fn write(&mut self, buf: &[u8]) -> Result<usize>
Write a buffer into this object, returning how many bytes were written. Read more
fn flush(&mut self) -> Result<()>
[src]
fn flush(&mut self) -> Result<()>
Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
1.0.0[src]
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this write. Read more
fn write_fmt(&mut self, fmt: Arguments) -> Result<(), Error>
1.0.0[src]
fn write_fmt(&mut self, fmt: Arguments) -> Result<(), Error>
Writes a formatted string into this writer, returning any error encountered. Read more
fn by_ref(&mut self) -> &mut Self
1.0.0[src]
fn by_ref(&mut self) -> &mut Self
Creates a "by reference" adaptor for this instance of Write
. Read more