azure_storage_blobs/blob/operations/
get_page_ranges.rs

1use crate::{blob::PageRangeList, prelude::*};
2use azure_core::{headers::*, prelude::*, RequestId};
3use std::str::from_utf8;
4use time::OffsetDateTime;
5
6operation! {
7    GetPageRanges,
8    client: BlobClient,
9    ?if_modified_since: IfModifiedSinceCondition,
10    ?if_match: IfMatchCondition,
11    ?if_tags: IfTags,
12    ?blob_versioning: BlobVersioning,
13    ?lease_id: LeaseId
14}
15
16impl GetPageRangesBuilder {
17    pub fn into_future(mut self) -> GetPageRanges {
18        Box::pin(async move {
19            let mut url = self.client.url()?;
20
21            url.query_pairs_mut().append_pair("comp", "pagelist");
22            self.blob_versioning.append_to_url_query(&mut url);
23
24            let mut headers = Headers::new();
25            headers.add(self.lease_id);
26            headers.add(self.if_modified_since);
27            headers.add(self.if_match);
28            headers.add(self.if_tags);
29
30            let mut request =
31                BlobClient::finalize_request(url, azure_core::Method::Get, headers, None)?;
32
33            let response = self.client.send(&mut self.context, &mut request).await?;
34
35            let (_, headers, body) = response.deconstruct();
36            let body = body.collect().await?;
37
38            GetPageRangesResponse::from_response(&headers, &body)
39        })
40    }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
44pub struct GetPageRangesResponse {
45    pub etag: String,
46    pub last_modified: OffsetDateTime,
47    pub request_id: RequestId,
48    pub date: OffsetDateTime,
49    pub page_list: PageRangeList,
50}
51
52impl GetPageRangesResponse {
53    pub(crate) fn from_response(
54        headers: &Headers,
55        body: &[u8],
56    ) -> azure_core::Result<GetPageRangesResponse> {
57        let etag = etag_from_headers(headers)?;
58        let last_modified = last_modified_from_headers(headers)?;
59        let request_id = request_id_from_headers(headers)?;
60        let date = date_from_headers(headers)?;
61
62        let body = from_utf8(body)?;
63        let page_list = PageRangeList::try_from_xml(body)?;
64
65        Ok(GetPageRangesResponse {
66            etag,
67            last_modified,
68            request_id,
69            date,
70            page_list,
71        })
72    }
73}