Expand description
An incremental encoder. Note that you must call finalize
after you’re
done writing.
Encoder
supports both combined and outboard encoding, depending on which
constructor you use.
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::Encoder::new(encoded_cursor);
encoder.write_all(b"some input")?;
encoder.finalize()?;
Implementations
sourceimpl<T: Read + Write + Seek> Encoder<T>
impl<T: Read + Write + Seek> Encoder<T>
sourcepub fn new(inner: T) -> Self
pub fn new(inner: T) -> Self
Create a new Encoder
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
.
sourcepub fn new_outboard(inner: T) -> Self
pub fn new_outboard(inner: T) -> Self
Create a new Encoder
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
.
sourcepub fn finalize(&mut self) -> Result<Hash>
pub fn finalize(&mut self) -> Result<Hash>
Finalize the encoding, after all the input has been written. You can’t keep using this
Encoder
again after calling finalize
, and writing or finalizing again will panic.
The underlying strategy of the Encoder
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 finalize
is a relatively expensive step.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Return the underlying writer.
Trait Implementations
sourceimpl<T: Read + Write + Seek> Write for Encoder<T>
impl<T: Read + Write + Seek> Write for Encoder<T>
sourcefn write(&mut self, input: &[u8]) -> Result<usize>
fn write(&mut self, input: &[u8]) -> Result<usize>
Write a buffer into this writer, returning how many bytes were written. Read more
sourcefn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
sourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)Determines if this Write
r has an efficient write_vectored
implementation. Read more
1.0.0 · sourcefn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
sourcefn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for Encoder<T> where
T: RefUnwindSafe,
impl<T> Send for Encoder<T> where
T: Send,
impl<T> Sync for Encoder<T> where
T: Sync,
impl<T> Unpin for Encoder<T> where
T: Unpin,
impl<T> UnwindSafe for Encoder<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more