| use adler32::RollingAdler32; |
| |
| pub trait RollingChecksum { |
| fn update(&mut self, byte: u8); |
| fn update_from_slice(&mut self, data: &[u8]); |
| fn current_hash(&self) -> u32; |
| } |
| |
| pub struct NoChecksum {} |
| |
| impl NoChecksum { |
| pub fn new() -> NoChecksum { |
| NoChecksum {} |
| } |
| } |
| |
| impl RollingChecksum for NoChecksum { |
| fn update(&mut self, _: u8) {} |
| fn update_from_slice(&mut self, _: &[u8]) {} |
| fn current_hash(&self) -> u32 { |
| 1 |
| } |
| } |
| |
| impl<'a> RollingChecksum for &'a mut NoChecksum { |
| fn update(&mut self, _: u8) {} |
| fn update_from_slice(&mut self, _: &[u8]) {} |
| fn current_hash(&self) -> u32 { |
| 1 |
| } |
| } |
| |
| pub struct Adler32Checksum { |
| adler32: RollingAdler32, |
| } |
| |
| impl Adler32Checksum { |
| pub fn new() -> Adler32Checksum { |
| Adler32Checksum { |
| adler32: RollingAdler32::new(), |
| } |
| } |
| } |
| |
| impl RollingChecksum for Adler32Checksum { |
| fn update(&mut self, byte: u8) { |
| self.adler32.update(byte); |
| } |
| |
| fn update_from_slice(&mut self, data: &[u8]) { |
| self.adler32.update_buffer(data); |
| } |
| |
| fn current_hash(&self) -> u32 { |
| self.adler32.hash() |
| } |
| } |
| |
| |
| impl<'a> RollingChecksum for &'a mut Adler32Checksum { |
| fn update(&mut self, byte: u8) { |
| self.adler32.update(byte); |
| } |
| |
| fn update_from_slice(&mut self, data: &[u8]) { |
| self.adler32.update_buffer(data); |
| } |
| |
| fn current_hash(&self) -> u32 { |
| self.adler32.hash() |
| } |
| } |