Skip to main content

takanawa_core/
hash.rs

1use sha2::{Digest, Sha256};
2
3#[repr(u8)]
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum HashKind {
6    None = 0,
7    Sha256 = 1,
8}
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum HashConfig {
12    None,
13    Sha256([u8; 32]),
14}
15
16impl HashConfig {
17    #[must_use]
18    pub const fn kind(self) -> HashKind {
19        match self {
20            Self::None => HashKind::None,
21            Self::Sha256(_) => HashKind::Sha256,
22        }
23    }
24
25    #[must_use]
26    pub const fn expected_sha256(self) -> Option<[u8; 32]> {
27        match self {
28            Self::None => None,
29            Self::Sha256(hash) => Some(hash),
30        }
31    }
32}
33
34#[must_use]
35pub fn hash_url(url: &str) -> [u8; 32] {
36    let digest = Sha256::digest(url.as_bytes());
37    digest.into()
38}