azure_storage_blobs/blob/operations/
put_block.rs1use 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}