use sha2;
use sha2::Digest;
use kv::Value;
use std::str;
#[derive(Clone)]
pub struct Token(String);
impl Token {
pub fn generate<'a, V: Value<'a>>(val: &V) -> Token {
let mut hasher = sha2::Sha256::default();
hasher.input(val.as_ref());
let hash = hasher.result();
Token::new(String::from(format!("{:x}", hash)))
}
pub fn new(s: String) -> Token {
Token(s)
}
pub fn as_string(&self) -> &String {
&self.0
}
}
impl AsRef<[u8]> for Token {
fn as_ref(&self) -> &[u8] {
self.0.as_ref()
}
}
impl <'a> From<&'a [u8]> for Token {
fn from(x: &'a [u8]) -> Token {
unsafe {
Token(String::from(str::from_utf8_unchecked(x)))
}
}
}