1use std::{
2 collections::hash_map::DefaultHasher,
3 hash::{self, BuildHasher, Hasher},
4};
5
6#[derive(Clone)]
9pub struct BuildHasherDefault {
10 hasher: hash::BuildHasherDefault<DefaultHasher>,
11}
12
13impl From<BuildHasherDefault> for Vec<u8> {
14 fn from(_: BuildHasherDefault) -> Vec<u8> {
15 vec![]
16 }
17}
18
19impl From<Vec<u8>> for BuildHasherDefault {
20 fn from(_: Vec<u8>) -> BuildHasherDefault {
21 BuildHasherDefault {
22 hasher: hash::BuildHasherDefault::<DefaultHasher>::default(),
23 }
24 }
25}
26
27impl BuildHasher for BuildHasherDefault {
28 type Hasher = DefaultHasher;
29
30 fn build_hasher(&self) -> Self::Hasher {
31 self.hasher.build_hasher()
32 }
33}
34
35impl Default for BuildHasherDefault {
36 fn default() -> Self {
37 BuildHasherDefault {
38 hasher: hash::BuildHasherDefault::<DefaultHasher>::default(),
39 }
40 }
41}
42
43#[derive(Clone)]
48pub struct NoHash;
49
50impl From<NoHash> for Vec<u8> {
51 fn from(_: NoHash) -> Vec<u8> {
52 vec![]
53 }
54}
55
56impl From<Vec<u8>> for NoHash {
57 fn from(_: Vec<u8>) -> NoHash {
58 NoHash
59 }
60}
61
62impl BuildHasher for NoHash {
63 type Hasher = NoHash;
64
65 fn build_hasher(&self) -> Self {
66 NoHash
67 }
68}
69
70impl Default for NoHash {
71 fn default() -> Self {
72 NoHash
73 }
74}
75
76impl Hasher for NoHash {
77 fn write(&mut self, _bytes: &[u8]) {
78 panic!("Can't generate hash digest using NoHash")
79 }
80
81 fn finish(&self) -> u64 {
82 panic!("Can't generate hash digest using NoHash")
83 }
84}