brine_tree/
hash.rs

1use bytemuck::{Pod, Zeroable};
2
3pub const HASH_BYTES: usize = 32;
4
5#[repr(C)]
6#[derive(Clone, Copy, PartialEq, Debug, Default, Pod, Zeroable)]
7pub struct Hash {
8   pub(crate) value: [u8; 32]
9}
10
11impl From<Hash> for [u8; HASH_BYTES] {
12    fn from(from: Hash) -> Self {
13        from.value
14    }
15}
16
17impl From<[u8; HASH_BYTES]> for Hash {
18    fn from(from: [u8; 32]) -> Self {
19        Self { value: from }
20    }
21}
22
23impl AsRef<[u8]> for Hash {
24    fn as_ref(&self) -> &[u8] {
25        &self.value
26    }
27}
28
29impl Hash {
30    pub const LEN: usize = HASH_BYTES;
31
32    pub fn new(hash_slice: &[u8]) -> Self {
33        Hash { value: <[u8; HASH_BYTES]>::try_from(hash_slice).unwrap() }
34    }
35
36    pub const fn new_from_array(hash_array: [u8; HASH_BYTES]) -> Self {
37        Self { value: hash_array }
38    }
39
40    pub fn to_bytes(self) -> [u8; HASH_BYTES] {
41        self.value
42    }
43}