use std::hash::{Hasher, SipHasher};
use bincode::{self, SizeLimit};
use rustc_serialize::Encodable;
pub fn big_endian_sip_hash<T: Encodable>(data: &T) -> u64 {
let encoded =
bincode::rustc_serialize::encode(data, SizeLimit::Infinite).ok().unwrap_or_else(Vec::new);
let mut hasher = SipHasher::new();
hasher.write(&encoded);
hasher.finish()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn hash_test() {
assert_eq!(4363127275821894810, big_endian_sip_hash(&"Test".to_owned()));
assert_eq!(4752125029563925438, big_endian_sip_hash(&[24u64, 6, 1314]));
let mut option = Some(1);
assert_eq!(17848574548716743387, big_endian_sip_hash(&option));
option = None;
assert_eq!(10041351145189524877, big_endian_sip_hash(&option));
}
}