azure_storage_blobs/blob/operations/
put_block.rs

1use crate::prelude::*;
2use azure_core::{headers::*, prelude::*, Body, RequestId};
3use azure_storage::{headers::consistency_from_headers, ConsistencyCRC64, ConsistencyMD5};
4use time::OffsetDateTime;
5
6operation! {
7    PutBlock,
8    client: BlobClient,
9    block_id: BlockId,
10    body: Body,
11    ?hash: Hash,
12    ?lease_id: LeaseId
13}
14
15impl PutBlockBuilder {
16    pub fn into_future(mut self) -> PutBlock {
17        Box::pin(async move {
18            let mut url = self.client.url()?;
19
20            self.block_id.append_to_url_query(&mut url);
21            url.query_pairs_mut().append_pair("comp", "block");
22
23            let mut headers = Headers::new();
24            headers.add(self.lease_id);
25
26            let mut request = BlobClient::finalize_request(
27                url,
28                azure_core::Method::Put,
29                headers,
30                Some(self.body),
31            )?;
32
33            let response = self.client.send(&mut self.context, &mut request).await?;
34            PutBlockResponse::from_headers(response.headers())
35        })
36    }
37}
38
39#[derive(Debug, Clone, PartialEq, Eq)]
40pub struct PutBlockResponse {
41    pub content_md5: Option<ConsistencyMD5>,
42    pub content_crc64: Option<ConsistencyCRC64>,
43    pub request_id: RequestId,
44    pub date: OffsetDateTime,
45    pub request_server_encrypted: bool,
46}
47
48impl PutBlockResponse {
49    pub(crate) fn from_headers(headers: &Headers) -> azure_core::Result<PutBlockResponse> {
50        let (content_md5, content_crc64) = consistency_from_headers(headers)?;
51        let request_id = request_id_from_headers(headers)?;
52        let date = date_from_headers(headers)?;
53        let request_server_encrypted = request_server_encrypted_from_headers(headers)?;
54
55        Ok(PutBlockResponse {
56            content_md5,
57            content_crc64,
58            request_id,
59            date,
60            request_server_encrypted,
61        })
62    }
63}