diff --git a/sdk/core/src/bytes_stream.rs b/sdk/core/src/bytes_stream.rs index 1085df1960..b7a898ca54 100644 --- a/sdk/core/src/bytes_stream.rs +++ b/sdk/core/src/bytes_stream.rs @@ -63,6 +63,10 @@ impl SeekableStream for BytesStream { self.bytes_read = 0; Ok(()) } + + fn len(&self) -> usize { + self.bytes.len() + } } impl AsyncRead for BytesStream { diff --git a/sdk/core/src/request.rs b/sdk/core/src/request.rs index 3b016673ad..9699395f61 100644 --- a/sdk/core/src/request.rs +++ b/sdk/core/src/request.rs @@ -13,6 +13,19 @@ pub enum Body { SeekableStream(Box), } +impl Body { + pub fn len(&self) -> usize { + match self { + Body::Bytes(bytes) => bytes.len(), + Body::SeekableStream(stream) => stream.len(), + } + } + + pub fn is_empty(&self) -> bool { + self.len() == 0 + } +} + impl From for Body where B: Into, diff --git a/sdk/core/src/seekable_stream.rs b/sdk/core/src/seekable_stream.rs index 313d35cb07..0e96f5fc53 100644 --- a/sdk/core/src/seekable_stream.rs +++ b/sdk/core/src/seekable_stream.rs @@ -11,6 +11,11 @@ pub trait SeekableStream: AsyncRead + Unpin + std::fmt::Debug + Send + Sync + dyn_clone::DynClone { async fn reset(&mut self) -> crate::error::Result<()>; + fn len(&self) -> usize; + + fn is_empty(&self) -> bool { + self.len() == 0 + } } dyn_clone::clone_trait_object!(SeekableStream); diff --git a/sdk/data_tables/src/clients/entity_client.rs b/sdk/data_tables/src/clients/entity_client.rs index 823cb7725b..5a51219ad1 100644 --- a/sdk/data_tables/src/clients/entity_client.rs +++ b/sdk/data_tables/src/clients/entity_client.rs @@ -2,9 +2,8 @@ use crate::{operations::*, prelude::*}; use azure_core::{ error::{Error, ErrorKind}, headers::Headers, - Context, Method, Request, Response, + Body, Context, Method, Request, Response, }; -use bytes::Bytes; use serde::{de::DeserializeOwned, Serialize}; use url::Url; @@ -119,7 +118,7 @@ impl EntityClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.partition_key_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/data_tables/src/clients/partition_key_client.rs b/sdk/data_tables/src/clients/partition_key_client.rs index 6b6cd1fa8d..8de9462dfd 100644 --- a/sdk/data_tables/src/clients/partition_key_client.rs +++ b/sdk/data_tables/src/clients/partition_key_client.rs @@ -1,7 +1,6 @@ use crate::{operations::*, prelude::*, transaction::TransactionOperations}; -use azure_core::{headers::Headers, Context, Method, Request, Response, Url}; +use azure_core::{headers::Headers, Body, Context, Method, Request, Response, Url}; use azure_storage::core::clients::StorageClient; -use bytes::Bytes; #[derive(Debug, Clone)] pub struct PartitionKeyClient { @@ -42,7 +41,7 @@ impl PartitionKeyClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.table_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/data_tables/src/clients/table_client.rs b/sdk/data_tables/src/clients/table_client.rs index 26c858a0db..4b1504e587 100644 --- a/sdk/data_tables/src/clients/table_client.rs +++ b/sdk/data_tables/src/clients/table_client.rs @@ -1,7 +1,6 @@ use crate::{clients::*, operations::*}; -use azure_core::{headers::Headers, Context, Method, Request, Response, Url}; +use azure_core::{headers::Headers, Body, Context, Method, Request, Response, Url}; use azure_storage::clients::StorageClient; -use bytes::Bytes; use serde::{de::DeserializeOwned, Serialize}; #[derive(Debug, Clone)] @@ -67,7 +66,7 @@ impl TableClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.table_service_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/data_tables/src/clients/table_service_client.rs b/sdk/data_tables/src/clients/table_service_client.rs index fbc744b5a1..bb1c5d4dee 100644 --- a/sdk/data_tables/src/clients/table_service_client.rs +++ b/sdk/data_tables/src/clients/table_service_client.rs @@ -1,7 +1,6 @@ use crate::operations::ListTablesBuilder; -use azure_core::{headers::Headers, Context, Method, Request, Response}; +use azure_core::{headers::Headers, Body, Context, Method, Request, Response}; use azure_storage::core::clients::{ServiceType, StorageClient}; -use bytes::Bytes; use url::Url; use super::TableClient; @@ -56,7 +55,7 @@ impl TableServiceClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.storage_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/data_tables/src/operations/insert_entity.rs b/sdk/data_tables/src/operations/insert_entity.rs index 987d542539..ceba26de33 100644 --- a/sdk/data_tables/src/operations/insert_entity.rs +++ b/sdk/data_tables/src/operations/insert_entity.rs @@ -3,16 +3,15 @@ use azure_core::{ error::{Error, ErrorKind}, headers::*, prelude::*, - CollectedResponse, Context, Method, + Body, CollectedResponse, Context, Method, }; -use bytes::Bytes; use serde::de::DeserializeOwned; use std::{convert::TryInto, marker::PhantomData}; #[derive(Debug, Clone)] pub struct InsertEntityBuilder { table_client: TableClient, - body: Bytes, + body: Body, return_entity: ReturnEntity, context: Context, _entity: PhantomData, @@ -22,7 +21,7 @@ impl InsertEntityBuilder where T: DeserializeOwned + Send, { - pub(crate) fn new(table_client: TableClient, body: Bytes) -> Self { + pub(crate) fn new(table_client: TableClient, body: Body) -> Self { Self { table_client, body, diff --git a/sdk/data_tables/src/operations/insert_or_replace_or_merge_entity.rs b/sdk/data_tables/src/operations/insert_or_replace_or_merge_entity.rs index 561583c5c1..2cebc61676 100644 --- a/sdk/data_tables/src/operations/insert_or_replace_or_merge_entity.rs +++ b/sdk/data_tables/src/operations/insert_or_replace_or_merge_entity.rs @@ -1,12 +1,11 @@ use crate::{operations::*, prelude::*}; -use azure_core::{headers::*, prelude::*, CollectedResponse, Method}; -use bytes::Bytes; +use azure_core::{headers::*, prelude::*, Body, CollectedResponse, Method}; use std::convert::TryInto; operation! { InsertOrReplaceOrMergeEntity, client: EntityClient, - body: Bytes, + body: Body, operation: InsertOperation, } diff --git a/sdk/data_tables/src/operations/update_or_merge_entity.rs b/sdk/data_tables/src/operations/update_or_merge_entity.rs index 78d08a3dab..1580b5cfeb 100644 --- a/sdk/data_tables/src/operations/update_or_merge_entity.rs +++ b/sdk/data_tables/src/operations/update_or_merge_entity.rs @@ -1,12 +1,11 @@ use crate::{operations::*, prelude::*, IfMatchCondition}; -use azure_core::{headers::*, prelude::*, CollectedResponse, Method}; -use bytes::Bytes; +use azure_core::{headers::*, prelude::*, Body, CollectedResponse, Method}; use std::convert::TryInto; operation! { UpdateOrMergeEntity, client: EntityClient, - body: Bytes, + body: Body, if_match_condition: IfMatchCondition, operation: UpdateOperation, } diff --git a/sdk/storage/src/core/clients/storage_client.rs b/sdk/storage/src/core/clients/storage_client.rs index 88b3ac36d1..95f116a935 100644 --- a/sdk/storage/src/core/clients/storage_client.rs +++ b/sdk/storage/src/core/clients/storage_client.rs @@ -5,15 +5,13 @@ use crate::shared_access_signature::account_sas::{ }; use crate::ConnectionString; use crate::TimeoutPolicy; -use azure_core::prelude::Timeout; -use azure_core::Method; use azure_core::{ auth::TokenCredential, error::{Error, ErrorKind, ResultExt}, headers::*, - ClientOptions, Context, Pipeline, Request, Response, + prelude::Timeout, + Body, ClientOptions, Context, Method, Pipeline, Request, Response, }; -use bytes::Bytes; use chrono::{DateTime, Utc}; use std::sync::Arc; use url::Url; @@ -371,7 +369,7 @@ impl StorageClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { let dt = chrono::Utc::now(); let time = format!("{}", dt.format("%a, %d %h %Y %T GMT")); diff --git a/sdk/storage_blobs/src/blob/operations/append_block.rs b/sdk/storage_blobs/src/blob/operations/append_block.rs index dc07d74f24..792354cc0a 100644 --- a/sdk/storage_blobs/src/blob/operations/append_block.rs +++ b/sdk/storage_blobs/src/blob/operations/append_block.rs @@ -1,11 +1,10 @@ use crate::{blob::operations::put_block::PutBlockResponse, prelude::*}; -use azure_core::{headers::*, prelude::*}; -use bytes::Bytes; +use azure_core::{headers::*, prelude::*, Body}; operation! { AppendBlock, client: BlobClient, - body: Bytes, + body: Body, ?hash: Hash, ?condition_max_size: ConditionMaxSize, ?condition_append_position: ConditionAppendPosition, diff --git a/sdk/storage_blobs/src/blob/operations/put_block.rs b/sdk/storage_blobs/src/blob/operations/put_block.rs index 0207d6b8e6..f6853b78c1 100644 --- a/sdk/storage_blobs/src/blob/operations/put_block.rs +++ b/sdk/storage_blobs/src/blob/operations/put_block.rs @@ -1,14 +1,13 @@ use crate::prelude::*; -use azure_core::{headers::*, prelude::*, RequestId}; +use azure_core::{headers::*, prelude::*, Body, RequestId}; use azure_storage::{headers::consistency_from_headers, ConsistencyCRC64, ConsistencyMD5}; -use bytes::Bytes; use chrono::{DateTime, Utc}; operation! { PutBlock, client: BlobClient, block_id: BlockId, - body: Bytes, + body: Body, ?hash: Hash, ?lease_id: LeaseId } diff --git a/sdk/storage_blobs/src/blob/operations/put_block_blob.rs b/sdk/storage_blobs/src/blob/operations/put_block_blob.rs index 37c226224c..a2abbd6af7 100644 --- a/sdk/storage_blobs/src/blob/operations/put_block_blob.rs +++ b/sdk/storage_blobs/src/blob/operations/put_block_blob.rs @@ -1,13 +1,12 @@ use crate::prelude::*; -use azure_core::{headers::*, prelude::*, RequestId}; +use azure_core::{headers::*, prelude::*, Body, RequestId}; use azure_storage::{headers::consistency_from_headers, ConsistencyCRC64, ConsistencyMD5}; -use bytes::Bytes; use chrono::{DateTime, Utc}; operation! { PutBlockBlob, client: BlobClient, - body: Bytes, + body: Body, ?hash: Hash, ?content_type: ContentType, ?content_encoding: ContentEncoding, diff --git a/sdk/storage_blobs/src/blob/operations/put_block_list.rs b/sdk/storage_blobs/src/blob/operations/put_block_list.rs index 3239bc1b9c..1f1c12399c 100644 --- a/sdk/storage_blobs/src/blob/operations/put_block_list.rs +++ b/sdk/storage_blobs/src/blob/operations/put_block_list.rs @@ -56,7 +56,7 @@ impl PutBlockListBuilder { url, azure_core::Method::Put, headers, - Some(body_bytes), + Some(body_bytes.into()), )?; let response = self.client.send(&mut self.context, &mut request).await?; diff --git a/sdk/storage_blobs/src/blob/operations/put_page.rs b/sdk/storage_blobs/src/blob/operations/put_page.rs index 79c8a2ad5d..7a25a0054e 100644 --- a/sdk/storage_blobs/src/blob/operations/put_page.rs +++ b/sdk/storage_blobs/src/blob/operations/put_page.rs @@ -1,14 +1,13 @@ use crate::prelude::*; -use azure_core::{headers::*, prelude::*, RequestId}; +use azure_core::{headers::*, prelude::*, Body, RequestId}; use azure_storage::{headers::content_md5_from_headers, ConsistencyMD5}; -use bytes::Bytes; use chrono::{DateTime, Utc}; operation! { PutPage, client: BlobClient, ba512_range: BA512Range, - content: Bytes, + content: Body, ?hash: Hash, ?sequence_number_condition: SequenceNumberCondition, ?if_modified_since_condition: IfModifiedSinceCondition, diff --git a/sdk/storage_blobs/src/clients/blob_client.rs b/sdk/storage_blobs/src/clients/blob_client.rs index c01c9d5553..25b4d32ce4 100644 --- a/sdk/storage_blobs/src/clients/blob_client.rs +++ b/sdk/storage_blobs/src/clients/blob_client.rs @@ -7,7 +7,7 @@ use azure_core::{ error::{Error, ErrorKind}, headers::Headers, prelude::*, - Method, Request, Response, StatusCode, + Body, Method, Request, Response, StatusCode, }; use azure_storage::core::{ clients::StorageCredentials, @@ -17,7 +17,6 @@ use azure_storage::core::{ SasToken, }, }; -use bytes::Bytes; use chrono::{DateTime, Utc}; use futures::StreamExt; use url::Url; @@ -110,7 +109,7 @@ impl BlobClient { } /// Creates a new block blob, or update the content of an existing block blob. - pub fn put_block_blob(&self, body: impl Into) -> PutBlockBlobBuilder { + pub fn put_block_blob(&self, body: impl Into) -> PutBlockBlobBuilder { PutBlockBlobBuilder::new(self.clone(), body.into()) } @@ -158,7 +157,7 @@ impl BlobClient { pub fn put_block( &self, block_id: impl Into, - body: impl Into, + body: impl Into, ) -> PutBlockBuilder { PutBlockBuilder::new(self.clone(), block_id.into(), body.into()) } @@ -186,7 +185,7 @@ impl BlobClient { } /// Write a range of pages to a page blob. - pub fn put_page(&self, ba512_range: BA512Range, content: impl Into) -> PutPageBuilder { + pub fn put_page(&self, ba512_range: BA512Range, content: impl Into) -> PutPageBuilder { PutPageBuilder::new(self.clone(), ba512_range, content.into()) } @@ -196,7 +195,7 @@ impl BlobClient { } /// Commits a new block of data to the end of an existing append blob. - pub fn append_block(&self, body: impl Into) -> AppendBlockBuilder { + pub fn append_block(&self, body: impl Into) -> AppendBlockBuilder { AppendBlockBuilder::new(self.clone(), body.into()) } @@ -282,7 +281,7 @@ impl BlobClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.container_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/storage_blobs/src/clients/blob_lease_client.rs b/sdk/storage_blobs/src/clients/blob_lease_client.rs index da852cef16..ec79236ec4 100644 --- a/sdk/storage_blobs/src/clients/blob_lease_client.rs +++ b/sdk/storage_blobs/src/clients/blob_lease_client.rs @@ -1,7 +1,6 @@ use crate::{blob::operations::*, prelude::*}; -use azure_core::{headers::Headers, prelude::*, Context, Method, Request, Response, Url}; +use azure_core::{headers::Headers, prelude::*, Body, Context, Method, Request, Response, Url}; use azure_storage::core::prelude::*; -use bytes::Bytes; #[derive(Debug, Clone)] pub struct BlobLeaseClient { @@ -57,7 +56,7 @@ impl BlobLeaseClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.blob_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/storage_blobs/src/clients/container_client.rs b/sdk/storage_blobs/src/clients/container_client.rs index 9f70e5dd43..cbc42fb8e0 100644 --- a/sdk/storage_blobs/src/clients/container_client.rs +++ b/sdk/storage_blobs/src/clients/container_client.rs @@ -3,9 +3,8 @@ use azure_core::{ error::{Error, ErrorKind}, headers::Headers, prelude::*, - Request, Response, + Body, Method, Request, Response, Url, }; -use azure_core::{Method, Url}; use azure_storage::{ core::clients::{ServiceType, StorageClient, StorageCredentials}, prelude::BlobSasPermissions, @@ -14,7 +13,6 @@ use azure_storage::{ SasToken, }, }; -use bytes::Bytes; use chrono::{DateTime, Utc}; pub trait AsContainerClient> { @@ -148,7 +146,7 @@ impl ContainerClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.storage_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/storage_blobs/src/clients/container_lease_client.rs b/sdk/storage_blobs/src/clients/container_lease_client.rs index 7fa17a598c..12fa84391b 100644 --- a/sdk/storage_blobs/src/clients/container_lease_client.rs +++ b/sdk/storage_blobs/src/clients/container_lease_client.rs @@ -1,7 +1,6 @@ use crate::{container::operations::*, prelude::*}; -use azure_core::{headers::Headers, prelude::*, Context, Method, Request, Response, Url}; +use azure_core::{headers::Headers, prelude::*, Body, Context, Method, Request, Response, Url}; use azure_storage::core::prelude::*; -use bytes::Bytes; #[derive(Debug, Clone)] pub struct ContainerLeaseClient { @@ -30,7 +29,7 @@ impl ContainerLeaseClient { url: Url, method: Method, headers: Headers, - request_body: Option, + request_body: Option, ) -> azure_core::Result { self.container_client .finalize_request(url, method, headers, request_body) diff --git a/sdk/storage_blobs/src/container/operations/set_acl.rs b/sdk/storage_blobs/src/container/operations/set_acl.rs index de29426078..25c1be5280 100644 --- a/sdk/storage_blobs/src/container/operations/set_acl.rs +++ b/sdk/storage_blobs/src/container/operations/set_acl.rs @@ -1,8 +1,6 @@ use crate::{container::public_access_from_header, prelude::*}; -use azure_core::Method; -use azure_core::{headers::*, prelude::*}; +use azure_core::{headers::*, prelude::*, Body, Method}; use azure_storage::core::StoredAccessPolicyList; -use bytes::Bytes; operation! { SetACL, @@ -30,7 +28,7 @@ impl SetACLBuilder { let mut request = self.client - .finalize_request(url, Method::Put, headers, xml.map(Bytes::from))?; + .finalize_request(url, Method::Put, headers, xml.map(Body::from))?; let response = self.client.send(&mut self.context, &mut request).await?;