azure_storage_blobs/blob/operations/
put_block_blob.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 PutBlockBlob,
8 client: BlobClient,
9 body: Body,
10 ?hash: Hash,
11 ?content_type: BlobContentType,
12 ?content_encoding: BlobContentEncoding,
13 ?content_language: BlobContentLanguage,
14 ?content_disposition: BlobContentDisposition,
15 ?metadata: Metadata,
16 ?access_tier: AccessTier,
17 ?tags: Tags,
18 ?lease_id: LeaseId,
19 ?encryption_key: CPKInfo,
20 ?encryption_scope: EncryptionScope,
21 ?if_modified_since: IfModifiedSinceCondition,
22 ?if_match: IfMatchCondition,
23 ?if_tags: IfTags
24}
25
26impl PutBlockBlobBuilder {
27 pub fn into_future(mut self) -> PutBlockBlob {
28 Box::pin(async move {
29 let url = self.client.url()?;
30
31 let mut headers = Headers::new();
32 headers.insert(BLOB_TYPE, "BlockBlob");
33 headers.add(self.hash);
34 headers.add(self.content_type);
35 headers.add(self.content_encoding);
36 headers.add(self.content_language);
37 headers.add(self.content_disposition);
38 headers.add(self.tags);
39 if let Some(metadata) = &self.metadata {
40 for m in metadata.iter() {
41 headers.add(m);
42 }
43 }
44 headers.add(self.access_tier);
45 headers.add(self.lease_id);
46 headers.add(self.encryption_key);
47 headers.add(self.encryption_scope);
48 headers.add(self.if_modified_since);
49 headers.add(self.if_match);
50 headers.add(self.if_tags);
51
52 let mut request = BlobClient::finalize_request(
53 url,
54 azure_core::Method::Put,
55 headers,
56 Some(self.body),
57 )?;
58
59 let response = self.client.send(&mut self.context, &mut request).await?;
60 PutBlockBlobResponse::from_headers(response.headers())
61 })
62 }
63}
64
65#[derive(Debug, Clone)]
66pub struct PutBlockBlobResponse {
67 pub etag: String,
68 pub last_modified: OffsetDateTime,
69 pub content_md5: Option<ConsistencyMD5>,
70 pub content_crc64: Option<ConsistencyCRC64>,
71 pub request_id: RequestId,
72 pub date: OffsetDateTime,
73 pub request_server_encrypted: bool,
74}
75
76impl PutBlockBlobResponse {
77 pub fn from_headers(headers: &Headers) -> azure_core::Result<PutBlockBlobResponse> {
78 let etag = etag_from_headers(headers)?;
79 let last_modified = last_modified_from_headers(headers)?;
80 let (content_md5, content_crc64) = consistency_from_headers(headers)?;
81 let request_id = request_id_from_headers(headers)?;
82 let date = date_from_headers(headers)?;
83 let request_server_encrypted = request_server_encrypted_from_headers(headers)?;
84
85 Ok(PutBlockBlobResponse {
86 etag,
87 last_modified,
88 content_md5,
89 content_crc64,
90 request_id,
91 date,
92 request_server_encrypted,
93 })
94 }
95}