use std::collections::HashMap;
use std::io::{Result, Read, Write, Error, ErrorKind};
use backend::Backend;
use hash::{Hash32, NewHash, WriteThroughHasher};
impl Backend for HashMap<Hash32, Vec<u8>>
{
fn store(
&mut self,
source: &Fn(&mut Write, &mut Backend) -> Result<()>,
newhash: &NewHash,
) -> Result<Hash32> {
let mut vec = vec![];
let hash;
{
let mut wth = WriteThroughHasher::new(&mut vec, newhash);
try!(source(&mut wth, self));
hash = wth.finalize();
}
self.insert(hash.clone(), vec);
Ok(hash)
}
fn request(
&self,
hash: &Hash32,
read: &Fn(&mut Read) -> Result<()>,
) -> Result<()> {
let vec = try!(self.get(hash)
.ok_or(Error::new(ErrorKind::NotFound, "")));
read(&mut &vec[..])
}
}