pub struct ChecksumWriter<W, H> { /* private fields */ }Expand description
Writer wrapper that updates a checksum hasher with bytes written.
The wrapped hasher is updated only after the inner writer accepts bytes. Failed writes do not update the hasher.
The checksum value is whatever the supplied Hasher reports. The Rust
standard-library hashers are not specified as stable file formats and are
not cryptographic digests; use this wrapper for stream instrumentation
unless the chosen hasher explicitly documents stronger guarantees.
Seeking changes only the wrapped writer position. It does not rewind, subtract from, or otherwise adjust the hasher state.
§Examples
use std::collections::hash_map::DefaultHasher;
use std::hash::Hasher;
use std::io::Write;
use qubit_io::ChecksumWriter;
let mut expected = DefaultHasher::new();
expected.write(b"payload");
let mut writer = ChecksumWriter::new(Vec::new(), DefaultHasher::new());
writer.write_all(b"payload")?;
assert_eq!(expected.finish(), writer.checksum());
assert_eq!(b"payload", writer.get_ref().as_slice());Implementations§
Source§impl<W, H> ChecksumWriter<W, H>where
H: Hasher,
impl<W, H> ChecksumWriter<W, H>where
H: Hasher,
Sourcepub fn hasher_ref(&self) -> &H
pub fn hasher_ref(&self) -> &H
Sourcepub fn hasher_mut(&mut self) -> &mut H
pub fn hasher_mut(&mut self) -> &mut H
Sourcepub fn into_inner(self) -> (W, H)
pub fn into_inner(self) -> (W, H)
Consumes this wrapper and returns the wrapped writer and hasher.
§Returns
A tuple containing the wrapped writer and hasher.
Trait Implementations§
Source§impl<W, H> Seek for ChecksumWriter<W, H>
impl<W, H> Seek for ChecksumWriter<W, H>
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
Source§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
🔬This is a nightly-only experimental API. (
seek_stream_len)Returns the length of this stream (in bytes). Read more
Source§impl<W, H> Write for ChecksumWriter<W, H>
impl<W, H> Write for ChecksumWriter<W, H>
Source§fn write(&mut self, buffer: &[u8]) -> Result<usize>
fn write(&mut self, buffer: &[u8]) -> Result<usize>
Writes a buffer into this writer, returning how many bytes were written. Read more
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flushes this output stream, ensuring that all intermediately buffered
contents reach their destination. Read more
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector)1.0.0 · Source§fn 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
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
write_all_vectored)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations§
impl<W, H> Freeze for ChecksumWriter<W, H>
impl<W, H> RefUnwindSafe for ChecksumWriter<W, H>where
W: RefUnwindSafe,
H: RefUnwindSafe,
impl<W, H> Send for ChecksumWriter<W, H>
impl<W, H> Sync for ChecksumWriter<W, H>
impl<W, H> Unpin for ChecksumWriter<W, H>
impl<W, H> UnsafeUnpin for ChecksumWriter<W, H>where
W: UnsafeUnpin,
H: UnsafeUnpin,
impl<W, H> UnwindSafe for ChecksumWriter<W, H>where
W: UnwindSafe,
H: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more