azure_core/headers/
utilities.rs

1use super::*;
2use crate::prelude::Continuation;
3use crate::request_options::LeaseId;
4use crate::{date, RequestId, SessionToken};
5use time::OffsetDateTime;
6
7pub fn lease_id_from_headers(headers: &Headers) -> crate::Result<LeaseId> {
8    headers.get_as(&LEASE_ID)
9}
10
11pub fn request_id_from_headers(headers: &Headers) -> crate::Result<RequestId> {
12    headers.get_as(&REQUEST_ID)
13}
14
15pub fn client_request_id_from_headers_optional(headers: &Headers) -> Option<String> {
16    headers.get_optional_string(&CLIENT_REQUEST_ID)
17}
18
19pub fn last_modified_from_headers_optional(
20    headers: &Headers,
21) -> crate::Result<Option<OffsetDateTime>> {
22    headers
23        .get_optional_str(&LAST_MODIFIED)
24        .map(date::parse_rfc1123)
25        .transpose()
26}
27
28pub fn date_from_headers(headers: &Headers) -> crate::Result<OffsetDateTime> {
29    rfc1123_from_headers_mandatory(headers, &DATE)
30}
31
32pub fn last_modified_from_headers(headers: &Headers) -> crate::Result<OffsetDateTime> {
33    rfc1123_from_headers_mandatory(headers, &LAST_MODIFIED)
34}
35
36pub fn rfc1123_from_headers_mandatory(
37    headers: &Headers,
38    header_name: &HeaderName,
39) -> crate::Result<OffsetDateTime> {
40    let date = headers.get_str(header_name)?;
41    date::parse_rfc1123(date)
42}
43
44pub fn continuation_token_from_headers_optional(
45    headers: &Headers,
46) -> crate::Result<Option<Continuation>> {
47    Ok(headers
48        .get_optional_string(&CONTINUATION)
49        .map(Continuation::from))
50}
51
52pub fn sku_name_from_headers(headers: &Headers) -> crate::Result<String> {
53    headers.get_as(&SKU_NAME)
54}
55
56pub fn account_kind_from_headers(headers: &Headers) -> crate::Result<String> {
57    headers.get_as(&ACCOUNT_KIND)
58}
59
60pub fn etag_from_headers_optional(headers: &Headers) -> crate::Result<Option<String>> {
61    Ok(headers.get_optional_string(&ETAG))
62}
63
64pub fn etag_from_headers(headers: &Headers) -> crate::Result<String> {
65    headers.get_as(&ETAG)
66}
67
68pub fn lease_time_from_headers(headers: &Headers) -> crate::Result<u8> {
69    headers.get_as(&LEASE_TIME)
70}
71
72#[cfg(not(feature = "azurite_workaround"))]
73pub fn delete_type_permanent_from_headers(headers: &Headers) -> crate::Result<bool> {
74    headers.get_as(&DELETE_TYPE_PERMANENT)
75}
76
77#[cfg(feature = "azurite_workaround")]
78pub fn delete_type_permanent_from_headers(headers: &Headers) -> crate::Result<bool> {
79    let result = headers.get_as(&DELETE_TYPE_PERMANENT);
80    if result.is_ok() {
81        result
82    } else {
83        tracing::warn!("Error receiving delete type permanent.  returning false");
84        Ok(false)
85    }
86}
87
88pub fn sequence_number_from_headers(headers: &Headers) -> crate::Result<u64> {
89    headers.get_as(&BLOB_SEQUENCE_NUMBER)
90}
91
92pub fn session_token_from_headers(headers: &Headers) -> crate::Result<SessionToken> {
93    headers.get_as(&SESSION_TOKEN)
94}
95
96pub fn server_from_headers(headers: &Headers) -> crate::Result<String> {
97    headers.get_as(&SERVER)
98}
99
100pub fn version_from_headers(headers: &Headers) -> crate::Result<String> {
101    headers.get_as(&VERSION)
102}
103
104pub fn request_server_encrypted_from_headers(headers: &Headers) -> crate::Result<bool> {
105    headers.get_as(&REQUEST_SERVER_ENCRYPTED)
106}
107
108pub fn content_type_from_headers(headers: &Headers) -> crate::Result<String> {
109    headers.get_as(&CONTENT_TYPE)
110}
111
112pub fn item_count_from_headers(headers: &Headers) -> crate::Result<u32> {
113    headers.get_as(&ITEM_COUNT)
114}