pub struct Adler32 { /* private fields */ }
Expand description
Adler-32 checksum calculator.
An instance of this type is equivalent to an Adler-32 checksum: It can be created in the default
state via new
(or the provided Default
impl), or from a precalculated checksum via
from_checksum
, and the currently stored checksum can be fetched via checksum
.
This type also implements Hasher
, which makes it easy to calculate Adler-32 checksums of any
type that implements or derives Hash
. This also allows using Adler-32 in a HashMap
, although
that is not recommended (while every checksum is a hash function, they are not necessarily a
good one).
Examples
Basic, piecewise checksum calculation:
use adler::Adler32;
let mut adler = Adler32::new();
adler.write_slice(&[0, 1, 2]);
adler.write_slice(&[3, 4, 5]);
assert_eq!(adler.checksum(), 0x00290010);
Using Hash
to process structures:
use std::hash::Hash;
use adler::Adler32;
#[derive(Hash)]
struct Data {
byte: u8,
word: u16,
big: u64,
}
let mut adler = Adler32::new();
let data = Data { byte: 0x1F, word: 0xABCD, big: !0 };
data.hash(&mut adler);
// hash value depends on architecture endianness
if cfg!(target_endian = "little") {
assert_eq!(adler.checksum(), 0x33410990);
}
if cfg!(target_endian = "big") {
assert_eq!(adler.checksum(), 0x331F0990);
}
Implementations
sourceimpl Adler32
impl Adler32
sourcepub fn from_checksum(sum: u32) -> Self
pub fn from_checksum(sum: u32) -> Self
Creates an Adler32
instance from a precomputed Adler-32 checksum.
This allows resuming checksum calculation without having to keep the Adler32
instance
around.
Example
let parts = [
"rust",
"acean",
];
let whole = adler::adler32_slice(b"rustacean");
let mut sum = Adler32::new();
sum.write_slice(parts[0].as_bytes());
let partial = sum.checksum();
// ...later
let mut sum = Adler32::from_checksum(partial);
sum.write_slice(parts[1].as_bytes());
assert_eq!(sum.checksum(), whole);
sourcepub fn write_slice(&mut self, bytes: &[u8])
pub fn write_slice(&mut self, bytes: &[u8])
Adds bytes
to the checksum calculation.
If efficiency matters, this should be called with Byte slices that contain at least a few thousand Bytes.
Trait Implementations
sourceimpl Hasher for Adler32
impl Hasher for Adler32
1.26.0 · sourcefn write_u128(&mut self, i: u128)
fn write_u128(&mut self, i: u128)
Writes a single u128
into this hasher.
1.3.0 · sourcefn write_usize(&mut self, i: usize)
fn write_usize(&mut self, i: usize)
Writes a single usize
into this hasher.
1.26.0 · sourcefn write_i128(&mut self, i: i128)
fn write_i128(&mut self, i: i128)
Writes a single i128
into this hasher.
1.3.0 · sourcefn write_isize(&mut self, i: isize)
fn write_isize(&mut self, i: isize)
Writes a single isize
into this hasher.
impl Copy for Adler32
Auto Trait Implementations
impl RefUnwindSafe for Adler32
impl Send for Adler32
impl Sync for Adler32
impl Unpin for Adler32
impl UnwindSafe for Adler32
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more