Skip to content
This repository was archived by the owner on Oct 6, 2020. It is now read-only.

Commit fe6a42e

Browse files
authored
Merge pull request #31 from MindFlavor/0.5.0
Removed Box<Future> and updated dependencies
2 parents f2d8e82 + b82b5a1 commit fe6a42e

31 files changed

+665
-500
lines changed

Cargo.lock

Lines changed: 216 additions & 134 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "azure_sdk_for_rust"
3-
version = "0.4.5"
3+
version = "0.5.0"
44
description = "Rust wrappers around Microsoft Azure REST APIs"
55
readme = "README.md"
66
authors = ["Francesco Cogno <francesco.cogno@outlook.com>", "Dong Liu <doliu@microsoft.com>"]
@@ -14,23 +14,23 @@ categories = ["api-bindings"]
1414

1515
[dependencies]
1616
RustyXML = "0.1.1"
17-
base64 = "0.6.0"
17+
base64 = "0.7.0"
1818
chrono = "0.4.0"
1919
env_logger = "0.4.3"
20-
futures = "0.1.14"
21-
hyper = "0.11.1"
20+
futures = "0.1.16"
21+
hyper = "0.11.6"
2222
hyper-tls = "0.1.2"
2323
log = "0.3.8"
24-
mime = "0.3.2"
24+
mime = "0.3.4"
2525
native-tls = "0.1.4"
26-
quick-error = "1.2.0"
26+
quick-error = "1.2.1"
2727
rust-crypto = "0.2.36"
28-
serde = "1.0.10"
29-
serde_derive = "1.0.10"
30-
serde_json = "1.0.2"
28+
serde = "1.0.15"
29+
serde_derive = "1.0.15"
30+
serde_json = "1.0.3"
3131
time = "0.1.38"
3232
tokio = "0.0.0"
33-
tokio-core = "0.1.8"
33+
tokio-core = "0.1.10"
3434
url = "1.5.1"
3535
uuid = "0.5.1"
3636

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
[![Crate](https://img.shields.io/crates/v/azure_sdk_for_rust.svg)](https://crates.io/crates/azure_sdk_for_rust) [![cratedown](https://img.shields.io/crates/d/azure_sdk_for_rust.svg)](https://crates.io/crates/azure_sdk_for_rust) [![cratelastdown](https://img.shields.io/crates/dv/azure_sdk_for_rust.svg)](https://crates.io/crates/azure_sdk_for_rust)
77

8-
[![tag](https://img.shields.io/github/tag/mindflavor/AzureSDKForRust.svg)](https://github.com/MindFlavor/AzureSDKForRust/tree/0.4.5)
9-
[![release](https://img.shields.io/github/release/mindflavor/AzureSDKForRust.svg)](https://github.com/MindFlavor/AzureSDKForRust/tree/0.4.5)
10-
[![commitssince](https://img.shields.io/github/commits-since/mindflavor/AzureSDKForRust/0.4.5.svg)](https://img.shields.io/github/commits-since/mindflavor/AzureSDKForRust/0.4.5.svg)
8+
[![tag](https://img.shields.io/github/tag/mindflavor/AzureSDKForRust.svg)](https://github.com/MindFlavor/AzureSDKForRust/tree/0.5.0)
9+
[![release](https://img.shields.io/github/release/mindflavor/AzureSDKForRust.svg)](https://github.com/MindFlavor/AzureSDKForRust/tree/0.5.0)
10+
[![commitssince](https://img.shields.io/github/commits-since/mindflavor/AzureSDKForRust/0.5.0.svg)](https://img.shields.io/github/commits-since/mindflavor/AzureSDKForRust/0.5.0.svg)
1111

1212
## Introduction
1313
Microsoft Azure expose its technologies via REST API. These APIs are easily consumable from any language (good) but are weakly typed. With this library and its related [crate](https://crates.io/crates/azure_sdk_for_rust/) you can exploit the power of Microsoft Azure from Rust in a idiomatic way.

examples/blob00.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
extern crate azure_sdk_for_rust;
22

33
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
64
extern crate hyper;
75
extern crate hyper_tls;
6+
extern crate tokio;
7+
extern crate tokio_core;
88

99
use std::error::Error;
1010

@@ -14,8 +14,6 @@ use tokio_core::reactor::Core;
1414
use azure_sdk_for_rust::azure::storage::client::Client;
1515
use azure_sdk_for_rust::azure::storage::blob::Blob;
1616

17-
use std::str;
18-
1917
fn main() {
2018
code().unwrap();
2119
}
@@ -40,8 +38,8 @@ fn code() -> Result<(), Box<Error>> {
4038

4139
let client = Client::new(&core.handle(), &account, &master_key)?;
4240

43-
let future = Blob::get(&client, &container, &blob, None, None, None)
44-
.and_then(move |(blob, content)| {
41+
let future =
42+
Blob::get(&client, &container, &blob, None, None, None).and_then(move |(blob, content)| {
4543
done(String::from_utf8(content))
4644
.map(move |s_content| {
4745
println!("blob == {:?}", blob);

examples/collection.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
extern crate azure_sdk_for_rust;
22

33
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
64
extern crate hyper;
75
extern crate hyper_tls;
6+
extern crate tokio;
7+
extern crate tokio_core;
88

99
use std::error::Error;
1010

examples/container00.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
extern crate azure_sdk_for_rust;
22

33
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
64
extern crate hyper;
75
extern crate hyper_tls;
6+
extern crate tokio;
7+
extern crate tokio_core;
88

99
use std::error::Error;
1010

@@ -31,6 +31,10 @@ fn code() -> Result<(), Box<Error>> {
3131
let master_key =
3232
std::env::var("STORAGE_MASTER_KEY").expect("Set env variable STORAGE_MASTER_KEY first!");
3333

34+
let container = std::env::args()
35+
.nth(1)
36+
.expect("please specify container name as command line parameter");
37+
3438
let mut core = Core::new()?;
3539

3640
let client = Client::new(&core.handle(), &account, &master_key)?;
@@ -44,7 +48,7 @@ fn code() -> Result<(), Box<Error>> {
4448

4549
core.run(future)?;
4650

47-
let future = Blob::list(&client, "mindarpa", &LIST_BLOB_OPTIONS_DEFAULT).map(|iv| {
51+
let future = Blob::list(&client, &container, &LIST_BLOB_OPTIONS_DEFAULT).map(|iv| {
4852
println!("List blob returned {} blobs.", iv.len());
4953
for cont in iv.iter() {
5054
println!(

examples/create_delete_database.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
extern crate azure_sdk_for_rust;
22

33
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
64
extern crate hyper;
75
extern crate hyper_tls;
6+
extern crate tokio;
7+
extern crate tokio_core;
88

99
use std::error::Error;
1010

examples/document00.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
extern crate azure_sdk_for_rust;
22

3+
extern crate chrono;
34
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
65
extern crate hyper;
76
extern crate hyper_tls;
8-
extern crate chrono;
7+
extern crate tokio;
8+
extern crate tokio_core;
99

1010
use std::error::Error;
1111

@@ -38,7 +38,8 @@ fn main() {
3838

3939
// This code will perform these tasks:
4040
// 1. Find an Azure Cosmos DB called *DATABASE*. If it does not exist, create it.
41-
// 2. Find an Azure Cosmos collection called *COLLECTION* in *DATABASE*. If it does not exist, create it.
41+
// 2. Find an Azure Cosmos collection called *COLLECTION* in *DATABASE*.
42+
// If it does not exist, create it.
4243
// 3. Store an entry in collection *COLLECTION* of database *DATABASE*.
4344
// 4. Delete everything.
4445
//
@@ -133,9 +134,13 @@ fn code() -> Result<(), Box<Error>> {
133134
// Notice how easy it is! :)
134135
// The method create_document will return, upon success,
135136
// the document attributes.
136-
let document_attributes = core.run(
137-
client.create_document_as_entity(&database, &collection, false, None, &doc),
138-
)?;
137+
let document_attributes = core.run(client.create_document_as_entity(
138+
&database,
139+
&collection,
140+
false,
141+
None,
142+
&doc,
143+
))?;
139144
println!("document_attributes == {:?}", document_attributes);
140145

141146
// We will perform some cleanup. First we delete the collection...

examples/document_entries00.rs

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
extern crate azure_sdk_for_rust;
22

3+
extern crate chrono;
34
extern crate futures;
4-
extern crate tokio_core;
5-
extern crate tokio;
65
extern crate hyper;
76
extern crate hyper_tls;
8-
extern crate chrono;
7+
extern crate tokio;
8+
extern crate tokio_core;
99

1010
use std::error::Error;
1111

@@ -49,12 +49,12 @@ fn main() {
4949
}
5050

5151
fn code() -> Result<(), Box<Error>> {
52-
let database_name = std::env::args().nth(1).expect(
53-
"please specify database name as first command line parameter",
54-
);
55-
let collection_name = std::env::args().nth(2).expect(
56-
"please specify collection name as second command line parameter",
57-
);
52+
let database_name = std::env::args()
53+
.nth(1)
54+
.expect("please specify database name as first command line parameter");
55+
let collection_name = std::env::args()
56+
.nth(2)
57+
.expect("please specify collection name as second command line parameter");
5858

5959
let master_key =
6060
std::env::var("COSMOS_MASTER_KEY").expect("Set env variable COSMOS_MASTER_KEY first!");
@@ -76,9 +76,13 @@ fn code() -> Result<(), Box<Error>> {
7676

7777
// let's add an entity. we ignore the errors at this point and just
7878
// notify the user.
79-
match core.run(
80-
client.create_document_as_entity(&database_name, &collection_name, false, None, &doc),
81-
) {
79+
match core.run(client.create_document_as_entity(
80+
&database_name,
81+
&collection_name,
82+
false,
83+
None,
84+
&doc,
85+
)) {
8286
Ok(_) => {
8387
println!("entity added");
8488
}
@@ -92,9 +96,11 @@ fn code() -> Result<(), Box<Error>> {
9296
let mut ldo = LIST_DOCUMENTS_OPTIONS_DEFAULT.clone();
9397
ldo.max_item_count = Some(3);
9498

95-
let response: ListDocumentsResponse<MySampleStructOwned> = core.run(
96-
client.list_documents(&database_name, &collection_name, &ldo),
97-
).unwrap();
99+
let response: ListDocumentsResponse<MySampleStructOwned> = core.run(client.list_documents(
100+
&database_name,
101+
&collection_name,
102+
&ldo,
103+
)).unwrap();
98104

99105
assert_eq!(response.documents.len(), 3);
100106
println!("response == {:?}", response);
@@ -111,9 +117,11 @@ fn code() -> Result<(), Box<Error>> {
111117
let mut ldo = LIST_DOCUMENTS_OPTIONS_DEFAULT.clone();
112118
ldo.continuation_token = Some(&ct);
113119

114-
let response: ListDocumentsResponse<MySampleStructOwned> = core.run(
115-
client.list_documents(&database_name, &collection_name, &ldo),
116-
).unwrap();
120+
let response: ListDocumentsResponse<MySampleStructOwned> = core.run(client.list_documents(
121+
&database_name,
122+
&collection_name,
123+
&ldo,
124+
)).unwrap();
117125

118126
assert_eq!(response.documents.len(), 47);
119127
println!("response == {:?}", response);
@@ -128,19 +136,25 @@ fn code() -> Result<(), Box<Error>> {
128136
let gdo = GET_DOCUMENT_OPTIONS_DEFAULT.clone();
129137
let id = format!("unique_id{}", 3);
130138

131-
let response: GetDocumentResponse<MySampleStructOwned> = core.run(
132-
client.get_document(&database_name, &collection_name, &id, &gdo),
133-
).unwrap();
139+
let response: GetDocumentResponse<MySampleStructOwned> = core.run(client.get_document(
140+
&database_name,
141+
&collection_name,
142+
&id,
143+
&gdo,
144+
)).unwrap();
134145

135146
assert_eq!(response.document.is_some(), true);
136147
println!("response == {:?}", response);
137148

138149
// This id should not be found. We expect None as result
139150
let id = format!("unique_id{}", 100);
140151

141-
let response: GetDocumentResponse<MySampleStructOwned> = core.run(
142-
client.get_document(&database_name, &collection_name, &id, &gdo),
143-
).unwrap();
152+
let response: GetDocumentResponse<MySampleStructOwned> = core.run(client.get_document(
153+
&database_name,
154+
&collection_name,
155+
&id,
156+
&gdo,
157+
)).unwrap();
144158

145159
assert_eq!(response.document.is_some(), false);
146160
println!("response == {:?}", response);

examples/lease_blob.rs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
extern crate azure_sdk_for_rust;
2+
3+
extern crate chrono;
4+
extern crate env_logger;
5+
extern crate futures;
6+
extern crate hyper;
7+
extern crate hyper_tls;
8+
extern crate tokio;
9+
extern crate tokio_core;
10+
11+
use std::error::Error;
12+
13+
use futures::future::*;
14+
use tokio_core::reactor::Core;
15+
16+
use azure_sdk_for_rust::azure::storage::client::Client;
17+
use azure_sdk_for_rust::azure::storage::blob::{Blob, BlobType, LEASE_BLOB_OPTIONS_DEFAULT};
18+
use azure_sdk_for_rust::azure::core::lease::{LeaseAction, LeaseState, LeaseStatus};
19+
20+
use hyper::mime::Mime;
21+
22+
fn main() {
23+
env_logger::init().unwrap();
24+
code().unwrap();
25+
}
26+
27+
// We run a separate method to use the elegant quotation mark operator.
28+
// A series of unwrap(), unwrap() would have achieved the same result.
29+
fn code() -> Result<(), Box<Error>> {
30+
// First we retrieve the account name and master key from environment variables.
31+
let account =
32+
std::env::var("STORAGE_ACCOUNT").expect("Set env variable STORAGE_ACCOUNT first!");
33+
let master_key =
34+
std::env::var("STORAGE_MASTER_KEY").expect("Set env variable STORAGE_MASTER_KEY first!");
35+
36+
let container_name = std::env::args()
37+
.nth(1)
38+
.expect("please specify container name as first command line parameter");
39+
let blob_name = std::env::args()
40+
.nth(2)
41+
.expect("please specify file name as second command line parameter");
42+
43+
let mut core = Core::new()?;
44+
45+
let client = Client::new(&core.handle(), &account, &master_key)?;
46+
47+
let new_blob = Blob {
48+
name: blob_name,
49+
container_name: container_name.to_owned(),
50+
snapshot_time: None,
51+
last_modified: chrono::Utc::now(),
52+
etag: "".to_owned(),
53+
content_length: 0,
54+
content_type: Some("text/plain".parse::<Mime>().unwrap()),
55+
content_encoding: None,
56+
content_language: None,
57+
content_md5: None,
58+
cache_control: None,
59+
x_ms_blob_sequence_number: None,
60+
blob_type: BlobType::BlockBlob,
61+
lease_status: LeaseStatus::Unlocked,
62+
lease_state: LeaseState::Available,
63+
lease_duration: None,
64+
copy_id: None,
65+
copy_status: None,
66+
copy_source: None,
67+
copy_progress: None,
68+
copy_completion: None,
69+
copy_status_description: None,
70+
};
71+
72+
println!("Leasing the blob...");
73+
74+
let mut lbo = LEASE_BLOB_OPTIONS_DEFAULT.clone();
75+
lbo.lease_duration = Some(15);
76+
let future = new_blob
77+
.lease(&client, LeaseAction::Acquire, &lbo)
78+
.map(|lease_id| {
79+
println!("Blob leased");
80+
lease_id
81+
});
82+
83+
let lease_id = core.run(future)?;
84+
println!("lease id == {:?}", lease_id);
85+
86+
Ok(())
87+
}

0 commit comments

Comments
 (0)