azure_storage/headers/
mod.rs

1use crate::{ConsistencyCRC64, ConsistencyMD5};
2use azure_core::error::Error;
3use azure_core::headers::{
4    client_request_id_from_headers_optional, date_from_headers, request_id_from_headers,
5    server_from_headers, version_from_headers, HeaderName, Headers, CONTENT_MD5,
6};
7use azure_core::RequestId;
8use time::OffsetDateTime;
9
10#[derive(Debug, Clone)]
11pub struct CommonStorageResponseHeaders {
12    pub request_id: RequestId,
13    pub client_request_id: Option<String>,
14    pub version: String,
15    pub date: OffsetDateTime,
16    pub server: String,
17}
18
19impl TryFrom<&Headers> for CommonStorageResponseHeaders {
20    type Error = Error;
21
22    fn try_from(headers: &Headers) -> azure_core::Result<Self> {
23        Ok(Self {
24            request_id: request_id_from_headers(headers)?,
25            client_request_id: client_request_id_from_headers_optional(headers),
26            version: version_from_headers(headers)?,
27            date: date_from_headers(headers)?,
28            server: server_from_headers(headers)?,
29        })
30    }
31}
32
33pub const CONTENT_CRC64: HeaderName = HeaderName::from_static("x-ms-content-crc64");
34pub const COPY_ID: HeaderName = HeaderName::from_static("x-ms-copy-id");
35pub const RENAME_SOURCE: HeaderName = HeaderName::from_static("x-ms-rename-source");
36
37pub fn content_crc64_from_headers(headers: &Headers) -> azure_core::Result<ConsistencyCRC64> {
38    headers.get_as(&CONTENT_CRC64)
39}
40
41pub fn content_crc64_from_headers_optional(
42    headers: &Headers,
43) -> azure_core::Result<Option<ConsistencyCRC64>> {
44    headers.get_optional_as(&CONTENT_CRC64)
45}
46
47pub fn content_md5_from_headers(headers: &Headers) -> azure_core::Result<ConsistencyMD5> {
48    headers.get_as(&CONTENT_MD5)
49}
50
51pub fn content_md5_from_headers_optional(
52    headers: &Headers,
53) -> azure_core::Result<Option<ConsistencyMD5>> {
54    headers.get_optional_as(&CONTENT_MD5)
55}
56
57pub fn consistency_from_headers(
58    headers: &Headers,
59) -> azure_core::Result<(Option<ConsistencyMD5>, Option<ConsistencyCRC64>)> {
60    let content_crc64 = content_crc64_from_headers_optional(headers)?;
61    let content_md5 = content_md5_from_headers_optional(headers)?;
62    Ok((content_md5, content_crc64))
63}