Skip to content

Commit 08d5000

Browse files
authored
Create azure_storage_blobs crate from azure_storage::blob (#499)
1 parent d7d7568 commit 08d5000

File tree

138 files changed

+507
-481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

138 files changed

+507
-481
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ jobs:
143143

144144
- name: e2e tests build
145145
run: |
146-
PROJECTS=(core cosmos identity messaging_servicebus storage)
146+
PROJECTS=(core cosmos identity messaging_servicebus storage storage_blobs storage_queues)
147147
for PROJ in ${PROJECTS[@]}
148148
do
149149
echo "Checking e2e tests for $PROJ"

sdk/core/src/macros.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ macro_rules! create_enum {
102102
}
103103

104104
impl<'de> serde::Deserialize<'de> for $name {
105-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
105+
fn deserialize<D>(deserializer: D) -> ::core::result::Result<Self, D::Error>
106106
where
107107
D: serde::Deserializer<'de>,
108108
{
@@ -118,7 +118,7 @@ macro_rules! create_enum {
118118
}
119119

120120
impl serde::Serialize for $name {
121-
fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
121+
fn serialize<S>(&self, s: S) -> ::core::result::Result<S::Ok, S::Error>
122122
where S: serde::Serializer {
123123
return s.serialize_str(&self.to_string())
124124
}

sdk/identity/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ async-trait = "0.1"
2929
[dev-dependencies]
3030
tokio = { version = "1.0", features = ["macros"] }
3131
azure_storage = { version = "0.1", path = "../storage" }
32+
azure_storage_blobs = { version = "0.1", path = "../storage_blobs" }
3233
env_logger = "0.8"
3334
serde_test = "1"
3435

sdk/identity/examples/device_code_flow.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use azure_identity::device_code_flow::{self, DeviceCodeResponse};
22
use azure_identity::refresh_token;
33
use azure_storage::core::prelude::*;
4+
use azure_storage_blobs::prelude::*;
45
use futures::stream::StreamExt;
56
use oauth2::ClientId;
67
use std::env;
@@ -77,16 +78,16 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
7778
// using the access token.
7879

7980
let http_client = azure_core::new_http_client();
80-
let storage_client = StorageAccountClient::new_bearer_token(
81+
let storage_account_client = StorageAccountClient::new_bearer_token(
8182
http_client.clone(),
8283
&storage_account_name,
8384
authorization.access_token().secret() as &str,
84-
)
85-
.as_storage_client();
85+
);
86+
let blob_service_client = storage_account_client.as_blob_service_client();
8687

8788
// now we enumerate the containers in the
8889
// specified storage account.
89-
let containers = storage_client.list_containers().execute().await?;
90+
let containers = blob_service_client.list_containers().execute().await?;
9091
println!("\nList containers completed succesfully: {:?}", containers);
9192

9293
// now let's refresh the token, if available

sdk/storage/Cargo.toml

Lines changed: 3 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,12 @@ azure_identity = { path = "../identity" }
4040
reqwest = "0.11"
4141

4242
[features]
43-
default = ["account", "blob", "queue", "table", "data_lake", "enable_reqwest"]
44-
test_e2e = ["account", "blob", "queue", "table", "data_lake"]
43+
default = ["account", "table", "data_lake", "enable_reqwest"]
44+
test_e2e = ["account", "table", "data_lake"]
4545
mock_transport_framework = [ "azure_core/mock_transport_framework"]
46-
test_integration = ["account", "blob", "queue", "table", "data_lake"]
46+
test_integration = ["account", "table", "data_lake"]
4747
account = []
4848
azurite_workaround = []
49-
blob = []
50-
queue = []
5149
table = []
5250
data_lake = []
5351
enable_reqwest = ["azure_core/enable_reqwest"]
@@ -61,78 +59,6 @@ required-features = ["table"]
6159
name="account00"
6260
required-features = ["account"]
6361
[[example]]
64-
name="blob_00"
65-
required-features=["blob"]
66-
[[example]]
67-
name="blob_01"
68-
required-features=["blob"]
69-
[[example]]
70-
name="blob_02_bearer_token"
71-
required-features=["blob"]
72-
[[example]]
73-
name="blob_04"
74-
required-features=["blob"]
75-
[[example]]
76-
name="blob_05_default_credential"
77-
required-features=["blob"]
78-
[[example]]
79-
name="blob_range"
80-
required-features=["blob"]
81-
[[example]]
82-
name="connection_string_builder"
83-
required-features=["blob"]
84-
[[example]]
85-
name="connection_string"
86-
required-features=["blob"]
87-
[[example]]
88-
name="container_00"
89-
required-features=["blob"]
90-
[[example]]
91-
name="container_01"
92-
required-features=["blob"]
93-
[[example]]
94-
name="container_and_blob"
95-
required-features=["blob"]
96-
[[example]]
97-
name="copy_blob_from_url"
98-
required-features=["blob"]
99-
[[example]]
100-
name="copy_blob"
101-
required-features=["blob"]
102-
[[example]]
103-
name="count_blobs"
104-
required-features=["blob"]
105-
[[example]]
106-
name="emulator_00"
107-
required-features=["blob"]
108-
[[example]]
109-
name="list_blobs_00"
110-
required-features=["blob"]
111-
[[example]]
112-
name="list_blobs_01"
113-
required-features=["blob"]
114-
[[example]]
115-
name="list_containers2"
116-
required-features=["blob"]
117-
[[example]]
118-
name="put_append_blob_00"
119-
required-features=["blob"]
120-
[[example]]
121-
name="put_block_blob_00"
122-
required-features=["blob"]
123-
[[example]]
124-
name="put_page_blob_00"
125-
required-features=["blob"]
126-
[[example]]
127-
name="shared_access_signature"
128-
required-features=["blob"]
129-
[[example]]
130-
name="stream_blob_00"
131-
required-features=["blob"]
132-
[[example]]
133-
name="stream_blob_01"
134-
required-features=["blob"]
135-
[[example]]
13662
name="data_lake_00_file_system"
13763
required-features=["data_lake"]
13864
[[example]]

sdk/storage/src/blob/prelude.rs

Lines changed: 0 additions & 11 deletions
This file was deleted.

sdk/storage/src/core/clients/storage_client.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ impl StorageClient {
5151
Ok(url)
5252
}
5353

54-
pub(crate) fn blob_url_with_segments<'a, I>(
55-
&'a self,
56-
segments: I,
57-
) -> Result<url::Url, url::ParseError>
54+
pub fn blob_url_with_segments<'a, I>(&'a self, segments: I) -> Result<url::Url, url::ParseError>
5855
where
5956
I: IntoIterator<Item = &'a str>,
6057
{
@@ -88,11 +85,6 @@ impl StorageClient {
8885
crate::account::requests::FindBlobsByTagsBuilder::new(self)
8986
}
9087

91-
#[cfg(feature = "blob")]
92-
pub fn list_containers(&self) -> crate::container::requests::ListContainersBuilder {
93-
crate::container::requests::ListContainersBuilder::new(self)
94-
}
95-
9688
#[allow(dead_code)]
9789
pub fn prepare_request(
9890
&self,

sdk/storage/src/core/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ pub use self::into_azure_path::IntoAzurePath;
1515
pub mod headers;
1616
pub use copy_id::{copy_id_from_headers, CopyId};
1717
pub use copy_progress::CopyProgress;
18-
pub(crate) mod parsing_xml;
18+
pub mod parsing_xml;
1919
mod stored_access_policy;
2020
pub use errors::{Error, Result};
21-
pub(crate) mod util;
21+
pub mod util;
2222
pub mod xml;
2323

2424
#[derive(Debug, Clone, Eq, PartialEq, Copy, Serialize, Deserialize)]

sdk/storage/src/lib.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ pub use self::core::{Error, Result};
1515

1616
#[cfg(feature = "account")]
1717
pub mod account;
18-
#[cfg(feature = "blob")]
19-
pub mod blob;
2018
pub mod core;
2119
#[cfg(feature = "data_lake")]
2220
pub mod data_lake;
@@ -26,8 +24,6 @@ pub mod table;
2624
pub use crate::core::*;
2725
#[cfg(feature = "account")]
2826
pub use account::*;
29-
#[cfg(feature = "blob")]
30-
pub use blob::*;
3127
#[cfg(feature = "data_lake")]
3228
pub use data_lake::*;
3329
#[cfg(feature = "table")]

sdk/storage_blobs/Cargo.toml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
[package]
2+
name = "azure_storage_blobs"
3+
version = "0.1.0"
4+
description = "Rust wrappers around Microsoft Azure Storage Blobs REST APIs"
5+
readme = "README.md"
6+
authors = ["Microsoft Corp."]
7+
license = "MIT"
8+
repository = "https://github.com/azure/azure-sdk-for-rust"
9+
homepage = "https://github.com/azure/azure-sdk-for-rust"
10+
documentation = "https://docs.rs/azure_storage_blobs"
11+
keywords = ["sdk", "azure", "rest", "iot", "cloud"]
12+
categories = ["api-bindings"]
13+
edition = "2018"
14+
15+
[dependencies]
16+
azure_core = { path = "../core", version = "0.1.0" }
17+
azure_storage = { path = "../storage", version = "0.1.0" }
18+
base64 = "0.13"
19+
bytes = "1.0"
20+
chrono = { version = "0.4", features = ["serde"] }
21+
futures = "0.3"
22+
http = "0.2"
23+
log = "0.4"
24+
md5 = "0.7"
25+
RustyXML = "0.3"
26+
serde = { version = "1.0" }
27+
serde_derive = "1.0"
28+
serde_json = "1.0"
29+
serde-xml-rs = "0.4"
30+
uuid = { version = "0.8", features = ["v4"] }
31+
url = "2.2"
32+
33+
[dev-dependencies]
34+
tokio = { version = "1.0", features = ["full"] }
35+
env_logger = "0.8"
36+
azure_identity = { path = "../identity" }
37+
reqwest = "0.11"
38+
39+
[features]
40+
test_e2e = []

sdk/storage_blobs/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Azure SDK for Rust - Azure Storage Blobs
2+
3+
Azure Storage Blobs crate for the unofficial Microsoft Azure SDK for Rust. This crate is part of a collection of crates: for more information please refer to [https://github.com/azure/azure-sdk-for-rust](https://github.com/azure/azure-sdk-for-rust).
4+
5+
## Usage
6+
7+
To set this crate as a dependency, add this to your Cargo.toml
8+
9+
```toml
10+
[dependencies]
11+
azure_storage_blobs = { version = "0.1.0", git = "https://github.com/Azure/azure-sdk-for-rust" }
12+
```

sdk/storage/examples/blob_00.rs renamed to sdk/storage_blobs/examples/blob_00.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#[macro_use]
22
extern crate log;
33
use azure_core::prelude::*;
4-
use azure_storage::blob::prelude::*;
54
use azure_storage::core::prelude::*;
5+
use azure_storage_blobs::prelude::*;
66
use futures::stream::StreamExt;
77
use std::error::Error;
88

@@ -22,7 +22,6 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
2222
.expect("please specify blob name as command line parameter");
2323

2424
let http_client = azure_core::new_http_client();
25-
2625
let storage_account_client =
2726
StorageAccountClient::new_access_key(http_client.clone(), &account, &master_key);
2827

sdk/storage/examples/blob_01.rs renamed to sdk/storage_blobs/examples/blob_01.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use azure_storage::blob::prelude::*;
21
use azure_storage::core::prelude::*;
2+
use azure_storage_blobs::prelude::*;
33
use std::error::Error;
44

55
#[tokio::main]
@@ -17,13 +17,13 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
1717
.expect("please specify container name as command line parameter");
1818

1919
let http_client = azure_core::new_http_client();
20-
let storage_account =
20+
let storage_client =
2121
StorageAccountClient::new_access_key(http_client.clone(), &account, &master_key)
2222
.as_storage_client();
23-
let container = storage_account.as_container_client(&container_name);
24-
let blob = container.as_blob_client("SorgeniaReorganizeRebuildIndexes.zip");
23+
let container_client = storage_client.as_container_client(&container_name);
24+
let blob_client = container_client.as_blob_client("SorgeniaReorganizeRebuildIndexes.zip");
2525

26-
let _res = container
26+
let _res = container_client
2727
.list_blobs()
2828
.include_copy(true)
2929
.include_deleted(true)
@@ -33,7 +33,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
3333
.execute()
3434
.await?;
3535

36-
let result = blob.get().execute().await?;
36+
let result = blob_client.get().execute().await?;
3737

3838
println!("{:?}", result);
3939

sdk/storage/examples/blob_02_bearer_token.rs renamed to sdk/storage_blobs/examples/blob_02_bearer_token.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#[macro_use]
22
extern crate log;
33

4-
use azure_storage::blob::prelude::*;
54
use azure_storage::core::prelude::*;
5+
use azure_storage_blobs::prelude::*;
66
use std::error::Error;
77

88
#[tokio::main]
@@ -23,17 +23,14 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
2323
.expect("please specify the bearer token as fourth command line parameter");
2424

2525
let http_client = azure_core::new_http_client();
26-
27-
let storage_account_client =
28-
StorageAccountClient::new_bearer_token(http_client.clone(), &account, bearer_token);
29-
let storage_client = storage_account_client.as_storage_client();
30-
let blob = storage_client
31-
.as_container_client(&container)
32-
.as_blob_client(&blob);
26+
let blob_client =
27+
StorageAccountClient::new_bearer_token(http_client.clone(), &account, bearer_token)
28+
.as_container_client(&container)
29+
.as_blob_client(&blob);
3330

3431
trace!("Requesting blob");
3532

36-
let response = blob.get().execute().await?;
33+
let response = blob_client.get().execute().await?;
3734

3835
let s_content = String::from_utf8(response.data.to_vec())?;
3936
println!("blob == {:?}", blob);

0 commit comments

Comments
 (0)