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}