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}