imagepipe 0.1.0

An image processing pipeline
Documentation
extern crate sha2;
use self::sha2::Digest;

extern crate bincode;
extern crate serde;
use self::serde::Serialize;

use std;
use std::io::Write;
use std::fmt;
use std::fmt::Debug;

type HashType = self::sha2::Sha256;
pub type BufHash = [u8;32];

#[derive(Copy, Clone)]
pub struct BufHasher {
  hash: HashType,
}
impl BufHasher {
  pub fn new() -> BufHasher {
    BufHasher {
      hash: HashType::default(),
    }
  }
  pub fn result(&self) -> BufHash {
    let mut result = BufHash::default();
    for (i, byte) in self.hash.result().into_iter().enumerate() {
      result[i] = byte;
    }
    result
  }
}
impl Debug for BufHasher {
  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    write!(f, "BufHasher {{ {:?} }}", self.result())
  }
}

impl Write for BufHasher {
  fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
    self.hash.input(buf);
    Ok(buf.len())
  }
  fn flush(&mut self) -> std::io::Result<()> {Ok(())}
}

impl BufHasher {
  pub fn from_serialize<T>(&mut self, obj: &T) where T: Serialize {
    self::bincode::serialize_into(self, obj).unwrap();
  }
}