azure_storage_blobs/options/
hash.rs

1use azure_core::{
2    base64,
3    headers::{self, Header, CONTENT_MD5},
4};
5use azure_storage::headers::CONTENT_CRC64;
6
7#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord)]
8pub enum Hash {
9    MD5([u8; 16]),
10    CRC64(u64),
11}
12
13impl Header for Hash {
14    fn name(&self) -> headers::HeaderName {
15        match self {
16            Hash::MD5(_) => CONTENT_MD5,
17            Hash::CRC64(_) => CONTENT_CRC64,
18        }
19    }
20
21    fn value(&self) -> headers::HeaderValue {
22        match self {
23            Hash::MD5(md5) => base64::encode(md5),
24            Hash::CRC64(crc64) => format!("{crc64}"),
25        }
26        .into()
27    }
28}
29
30impl From<[u8; 16]> for Hash {
31    fn from(md5: [u8; 16]) -> Self {
32        Hash::MD5(md5)
33    }
34}
35
36#[cfg(feature = "md5")]
37impl From<md5::Digest> for Hash {
38    fn from(md5: md5::Digest) -> Self {
39        Hash::MD5(md5.0)
40    }
41}