Skip to content

Create azure_storage_blobs crate from azure_storage::blob #499

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Dec 20, 2021
Merged
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ jobs:

- name: e2e tests build
run: |
PROJECTS=(core cosmos identity messaging_servicebus storage)
PROJECTS=(core cosmos identity messaging_servicebus storage storage_blobs storage_queues)
for PROJ in ${PROJECTS[@]}
do
echo "Checking e2e tests for $PROJ"
Expand Down
4 changes: 2 additions & 2 deletions sdk/core/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ macro_rules! create_enum {
}

impl<'de> serde::Deserialize<'de> for $name {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D>(deserializer: D) -> ::core::result::Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
Expand All @@ -118,7 +118,7 @@ macro_rules! create_enum {
}

impl serde::Serialize for $name {
fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
fn serialize<S>(&self, s: S) -> ::core::result::Result<S::Ok, S::Error>
where S: serde::Serializer {
return s.serialize_str(&self.to_string())
}
Expand Down
1 change: 1 addition & 0 deletions sdk/identity/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ async-trait = "0.1"
[dev-dependencies]
tokio = { version = "1.0", features = ["macros"] }
azure_storage = { version = "0.1", path = "../storage" }
azure_storage_blobs = { version = "0.1", path = "../storage_blobs" }
env_logger = "0.8"
serde_test = "1"

Expand Down
9 changes: 5 additions & 4 deletions sdk/identity/examples/device_code_flow.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use azure_identity::device_code_flow::{self, DeviceCodeResponse};
use azure_identity::refresh_token;
use azure_storage::core::prelude::*;
use azure_storage_blobs::prelude::*;
use futures::stream::StreamExt;
use oauth2::ClientId;
use std::env;
Expand Down Expand Up @@ -77,16 +78,16 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
// using the access token.

let http_client = azure_core::new_http_client();
let storage_client = StorageAccountClient::new_bearer_token(
let storage_account_client = StorageAccountClient::new_bearer_token(
http_client.clone(),
&storage_account_name,
authorization.access_token().secret() as &str,
)
.as_storage_client();
);
let blob_service_client = storage_account_client.as_blob_service_client();

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

// now let's refresh the token, if available
Expand Down
80 changes: 3 additions & 77 deletions sdk/storage/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,12 @@ azure_identity = { path = "../identity" }
reqwest = "0.11"

[features]
default = ["account", "blob", "queue", "table", "data_lake", "enable_reqwest"]
test_e2e = ["account", "blob", "queue", "table", "data_lake"]
default = ["account", "table", "data_lake", "enable_reqwest"]
test_e2e = ["account", "table", "data_lake"]
mock_transport_framework = [ "azure_core/mock_transport_framework"]
test_integration = ["account", "blob", "queue", "table", "data_lake"]
test_integration = ["account", "table", "data_lake"]
account = []
azurite_workaround = []
blob = []
queue = []
table = []
data_lake = []
enable_reqwest = ["azure_core/enable_reqwest"]
Expand All @@ -61,78 +59,6 @@ required-features = ["table"]
name="account00"
required-features = ["account"]
[[example]]
name="blob_00"
required-features=["blob"]
[[example]]
name="blob_01"
required-features=["blob"]
[[example]]
name="blob_02_bearer_token"
required-features=["blob"]
[[example]]
name="blob_04"
required-features=["blob"]
[[example]]
name="blob_05_default_credential"
required-features=["blob"]
[[example]]
name="blob_range"
required-features=["blob"]
[[example]]
name="connection_string_builder"
required-features=["blob"]
[[example]]
name="connection_string"
required-features=["blob"]
[[example]]
name="container_00"
required-features=["blob"]
[[example]]
name="container_01"
required-features=["blob"]
[[example]]
name="container_and_blob"
required-features=["blob"]
[[example]]
name="copy_blob_from_url"
required-features=["blob"]
[[example]]
name="copy_blob"
required-features=["blob"]
[[example]]
name="count_blobs"
required-features=["blob"]
[[example]]
name="emulator_00"
required-features=["blob"]
[[example]]
name="list_blobs_00"
required-features=["blob"]
[[example]]
name="list_blobs_01"
required-features=["blob"]
[[example]]
name="list_containers2"
required-features=["blob"]
[[example]]
name="put_append_blob_00"
required-features=["blob"]
[[example]]
name="put_block_blob_00"
required-features=["blob"]
[[example]]
name="put_page_blob_00"
required-features=["blob"]
[[example]]
name="shared_access_signature"
required-features=["blob"]
[[example]]
name="stream_blob_00"
required-features=["blob"]
[[example]]
name="stream_blob_01"
required-features=["blob"]
[[example]]
name="data_lake_00_file_system"
required-features=["data_lake"]
[[example]]
Expand Down
11 changes: 0 additions & 11 deletions sdk/storage/src/blob/prelude.rs

This file was deleted.

10 changes: 1 addition & 9 deletions sdk/storage/src/core/clients/storage_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,7 @@ impl StorageClient {
Ok(url)
}

pub(crate) fn blob_url_with_segments<'a, I>(
&'a self,
segments: I,
) -> Result<url::Url, url::ParseError>
pub fn blob_url_with_segments<'a, I>(&'a self, segments: I) -> Result<url::Url, url::ParseError>
where
I: IntoIterator<Item = &'a str>,
{
Expand Down Expand Up @@ -88,11 +85,6 @@ impl StorageClient {
crate::account::requests::FindBlobsByTagsBuilder::new(self)
}

#[cfg(feature = "blob")]
pub fn list_containers(&self) -> crate::container::requests::ListContainersBuilder {
crate::container::requests::ListContainersBuilder::new(self)
}

#[allow(dead_code)]
pub fn prepare_request(
&self,
Expand Down
4 changes: 2 additions & 2 deletions sdk/storage/src/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ pub use self::into_azure_path::IntoAzurePath;
pub mod headers;
pub use copy_id::{copy_id_from_headers, CopyId};
pub use copy_progress::CopyProgress;
pub(crate) mod parsing_xml;
pub mod parsing_xml;
mod stored_access_policy;
pub use errors::{Error, Result};
pub(crate) mod util;
pub mod util;
pub mod xml;

#[derive(Debug, Clone, Eq, PartialEq, Copy, Serialize, Deserialize)]
Expand Down
4 changes: 0 additions & 4 deletions sdk/storage/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ pub use self::core::{Error, Result};

#[cfg(feature = "account")]
pub mod account;
#[cfg(feature = "blob")]
pub mod blob;
pub mod core;
#[cfg(feature = "data_lake")]
pub mod data_lake;
Expand All @@ -26,8 +24,6 @@ pub mod table;
pub use crate::core::*;
#[cfg(feature = "account")]
pub use account::*;
#[cfg(feature = "blob")]
pub use blob::*;
#[cfg(feature = "data_lake")]
pub use data_lake::*;
#[cfg(feature = "table")]
Expand Down
40 changes: 40 additions & 0 deletions sdk/storage_blobs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[package]
name = "azure_storage_blobs"
version = "0.1.0"
description = "Rust wrappers around Microsoft Azure Storage Blobs REST APIs"
readme = "README.md"
authors = ["Microsoft Corp."]
license = "MIT"
repository = "https://github.com/azure/azure-sdk-for-rust"
homepage = "https://github.com/azure/azure-sdk-for-rust"
documentation = "https://docs.rs/azure_storage_blobs"
keywords = ["sdk", "azure", "rest", "iot", "cloud"]
categories = ["api-bindings"]
edition = "2018"

[dependencies]
azure_core = { path = "../core", version = "0.1.0" }
azure_storage = { path = "../storage", version = "0.1.0" }
base64 = "0.13"
bytes = "1.0"
chrono = { version = "0.4", features = ["serde"] }
futures = "0.3"
http = "0.2"
log = "0.4"
md5 = "0.7"
RustyXML = "0.3"
serde = { version = "1.0" }
serde_derive = "1.0"
serde_json = "1.0"
serde-xml-rs = "0.4"
uuid = { version = "0.8", features = ["v4"] }
url = "2.2"

[dev-dependencies]
tokio = { version = "1.0", features = ["full"] }
env_logger = "0.8"
azure_identity = { path = "../identity" }
reqwest = "0.11"

[features]
test_e2e = []
12 changes: 12 additions & 0 deletions sdk/storage_blobs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Azure SDK for Rust - Azure Storage Blobs

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).

## Usage

To set this crate as a dependency, add this to your Cargo.toml

```toml
[dependencies]
azure_storage_blobs = { version = "0.1.0", git = "https://github.com/Azure/azure-sdk-for-rust" }
```
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#[macro_use]
extern crate log;
use azure_core::prelude::*;
use azure_storage::blob::prelude::*;
use azure_storage::core::prelude::*;
use azure_storage_blobs::prelude::*;
use futures::stream::StreamExt;
use std::error::Error;

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

let http_client = azure_core::new_http_client();

let storage_account_client =
StorageAccountClient::new_access_key(http_client.clone(), &account, &master_key);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use azure_storage::blob::prelude::*;
use azure_storage::core::prelude::*;
use azure_storage_blobs::prelude::*;
use std::error::Error;

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

let http_client = azure_core::new_http_client();
let storage_account =
let storage_client =
StorageAccountClient::new_access_key(http_client.clone(), &account, &master_key)
.as_storage_client();
let container = storage_account.as_container_client(&container_name);
let blob = container.as_blob_client("SorgeniaReorganizeRebuildIndexes.zip");
let container_client = storage_client.as_container_client(&container_name);
let blob_client = container_client.as_blob_client("SorgeniaReorganizeRebuildIndexes.zip");

let _res = container
let _res = container_client
.list_blobs()
.include_copy(true)
.include_deleted(true)
Expand All @@ -33,7 +33,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
.execute()
.await?;

let result = blob.get().execute().await?;
let result = blob_client.get().execute().await?;

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#[macro_use]
extern crate log;

use azure_storage::blob::prelude::*;
use azure_storage::core::prelude::*;
use azure_storage_blobs::prelude::*;
use std::error::Error;

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

let http_client = azure_core::new_http_client();

let storage_account_client =
StorageAccountClient::new_bearer_token(http_client.clone(), &account, bearer_token);
let storage_client = storage_account_client.as_storage_client();
let blob = storage_client
.as_container_client(&container)
.as_blob_client(&blob);
let blob_client =
StorageAccountClient::new_bearer_token(http_client.clone(), &account, bearer_token)
.as_container_client(&container)
.as_blob_client(&blob);

trace!("Requesting blob");

let response = blob.get().execute().await?;
let response = blob_client.get().execute().await?;

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