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

Commit 5ae932c

Browse files
authored
Merge pull request #28 from MindFlavor/candidate
Implemented query document (as JSON and as DeserializeOwned)
2 parents 2e15800 + 41deb4e commit 5ae932c

File tree

19 files changed

+684
-188
lines changed

19 files changed

+684
-188
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 3 additions & 7 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.3"
3+
version = "0.4.4"
44
description = "Rust wrappers around Microsoft Azure REST APIs"
55
readme = "README.md"
66
authors = ["Francesco Cogno <[email protected]>", "Dong Liu <[email protected]>"]
@@ -11,10 +11,6 @@ documentation = "http://mindflavor.github.io/AzureSDKForRust/azure_sdk_for_rust
1111
keywords = ["sdk", "azure", "rest", "iot", "cloud"]
1212
categories = ["api-bindings"]
1313

14-
[[bin]]
15-
name = "main"
16-
doc = false
17-
1814
[dependencies]
1915
RustyXML = "0.1.1"
2016
base64 = "0.6.0"
@@ -28,8 +24,8 @@ mime = "0.3.2"
2824
native-tls = "0.1.4"
2925
quick-error = "1.2.0"
3026
rust-crypto = "0.2.36"
31-
serde = "1.0.9"
32-
serde_derive = "1.0.9"
27+
serde = "1.0.10"
28+
serde_derive = "1.0.10"
3329
serde_json = "1.0.2"
3430
time = "0.1.38"
3531
tokio = "0.0.0"

examples/document_entries00.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ use azure_sdk_for_rust::azure::cosmos::authorization_token::{AuthorizationToken,
1515
use azure_sdk_for_rust::azure::cosmos::client::Client;
1616
use azure_sdk_for_rust::azure::cosmos::list_documents::LIST_DOCUMENTS_OPTIONS_DEFAULT;
1717
use azure_sdk_for_rust::azure::cosmos::get_document::GET_DOCUMENT_OPTIONS_DEFAULT;
18-
use azure_sdk_for_rust::azure::cosmos::request_response::{ListDocumentsResponse,
19-
GetDocumentResponse};
18+
use azure_sdk_for_rust::azure::cosmos::request_response::{GetDocumentResponse,
19+
ListDocumentsResponse};
2020

2121
#[macro_use]
2222
extern crate serde_derive;
@@ -66,7 +66,7 @@ fn code() -> Result<(), Box<Error>> {
6666

6767
let client = Client::new(&core.handle(), authorization_token)?;
6868

69-
for i in 0..5 {
69+
for i in 0..50 {
7070
let doc = MySampleStruct {
7171
id: &format!("unique_id{}", i),
7272
a_string: "Something here",
@@ -115,10 +115,10 @@ fn code() -> Result<(), Box<Error>> {
115115
client.list_documents(&database_name, &collection_name, &ldo),
116116
).unwrap();
117117

118-
assert_eq!(response.documents.len(), 2);
118+
assert_eq!(response.documents.len(), 47);
119119
println!("response == {:?}", response);
120120

121-
// we got the last 2 entries. Now continuation_token
121+
// we got the last 47 entries. Now continuation_token
122122
// must be absent
123123
assert_eq!(
124124
response.additional_headers.continuation_token.is_some(),

examples/put_blob.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ use futures::future::*;
1414
use tokio_core::reactor::Core;
1515

1616
use azure_sdk_for_rust::azure::storage::client::Client;
17-
use azure_sdk_for_rust::azure::storage::blob::{BlobType, Blob, PUT_OPTIONS_DEFAULT,
18-
LEASE_BLOB_OPTIONS_DEFAULT,
19-
LIST_BLOB_OPTIONS_DEFAULT};
20-
use azure_sdk_for_rust::azure::core::lease::{LeaseState, LeaseStatus, LeaseAction};
17+
use azure_sdk_for_rust::azure::storage::blob::{Blob, BlobType, LEASE_BLOB_OPTIONS_DEFAULT,
18+
LIST_BLOB_OPTIONS_DEFAULT, PUT_OPTIONS_DEFAULT};
19+
use azure_sdk_for_rust::azure::core::lease::{LeaseAction, LeaseState, LeaseStatus};
2120

2221
use azure_sdk_for_rust::azure::core::errors::AzureError;
2322

examples/query_document00.rs

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
extern crate azure_sdk_for_rust;
2+
3+
extern crate futures;
4+
extern crate tokio_core;
5+
extern crate tokio;
6+
extern crate hyper;
7+
extern crate hyper_tls;
8+
extern crate chrono;
9+
10+
use std::error::Error;
11+
12+
use tokio_core::reactor::Core;
13+
14+
use azure_sdk_for_rust::azure::cosmos::authorization_token::{AuthorizationToken, TokenType};
15+
use azure_sdk_for_rust::azure::cosmos::client::Client;
16+
use azure_sdk_for_rust::azure::cosmos::query_document::QueryDocumentOptions;
17+
use azure_sdk_for_rust::azure::cosmos::query::Query;
18+
19+
#[macro_use]
20+
extern crate serde_derive;
21+
22+
#[derive(Serialize, Deserialize, Debug)]
23+
struct MySampleStructOwned {
24+
id: String,
25+
a_string: String,
26+
a_number: u64,
27+
a_timestamp: i64,
28+
}
29+
30+
fn main() {
31+
code().unwrap();
32+
}
33+
34+
fn code() -> Result<(), Box<Error>> {
35+
let database_name = std::env::args().nth(1).expect(
36+
"please specify database name as first command line parameter",
37+
);
38+
let collection_name = std::env::args().nth(2).expect(
39+
"please specify collection name as second command line parameter",
40+
);
41+
let query = std::env::args()
42+
.nth(3)
43+
.expect("please specify requested query");
44+
45+
let account = std::env::var("COSMOS_ACCOUNT").expect("Set env variable COSMOS_ACCOUNT first!");
46+
let master_key =
47+
std::env::var("COSMOS_MASTER_KEY").expect("Set env variable COSMOS_MASTER_KEY first!");
48+
49+
let authorization_token = AuthorizationToken::new(account, TokenType::Master, master_key)?;
50+
51+
let mut core = Core::new()?;
52+
53+
let client = Client::new(&core.handle(), authorization_token)?;
54+
55+
let options = QueryDocumentOptions::new();
56+
57+
let future = client.query_document_json(
58+
&database_name,
59+
&collection_name,
60+
&Query::from(&query as &str),
61+
&options,
62+
);
63+
64+
let ret = core.run(future)?;
65+
66+
println!("As JSON:\n{:?}", ret);
67+
68+
for doc in ret.results.into_iter() {
69+
println!("{}", doc.result);
70+
}
71+
72+
let future = client.query_document::<_, _, MySampleStructOwned>(
73+
&database_name,
74+
&collection_name,
75+
&Query::from(&query as &str),
76+
&options,
77+
);
78+
79+
let ret = core.run(future)?;
80+
81+
println!("\nAs entities:\n{:?}", ret);
82+
83+
for doc in ret.results.into_iter() {
84+
println!("{:?}", doc.result);
85+
}
86+
87+
// test continuation token
88+
// only if we have more than 2 records
89+
let mut options = QueryDocumentOptions::new();
90+
options.max_item_count = Some(2);
91+
92+
let future = client.query_document::<_, _, MySampleStructOwned>(
93+
&database_name,
94+
&collection_name,
95+
&Query::from(&query as &str),
96+
&options,
97+
);
98+
99+
let ret = core.run(future)?;
100+
101+
println!(
102+
"Received {} entries. Continuation token is == {:?}",
103+
ret.results.len(),
104+
ret.additional_headers.continuation_token
105+
);
106+
107+
if let Some(ct) = ret.additional_headers.continuation_token {
108+
let ret = {
109+
// if we have more, let's get them
110+
let mut options = QueryDocumentOptions::new();
111+
options.max_item_count = None;
112+
options.continuation_token = Some(&ct);
113+
114+
let future = client.query_document::<_, _, MySampleStructOwned>(
115+
&database_name,
116+
&collection_name,
117+
&Query::from(&query as &str),
118+
&options,
119+
);
120+
core.run(future)?
121+
};
122+
println!(
123+
"Received {} entries. Continuation token is == {:?}",
124+
ret.results.len(),
125+
ret.additional_headers.continuation_token
126+
);
127+
}
128+
129+
Ok(())
130+
}

src/azure/core/parsing.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use xml::Element;
2-
use xml::Xml::{ElementNode, CharacterNode};
2+
use xml::Xml::{CharacterNode, ElementNode};
33
use azure::core::errors::TraversingError;
44
use chrono;
55

@@ -152,12 +152,10 @@ where
152152
T: FromStringOptional<T>,
153153
{
154154
match try!(traverse_single_optional(node, path)) {
155-
Some(e) => {
156-
match inner_text(e) {
157-
Ok(txt) => Ok(Some(try!(T::from_str_optional(txt)))),
158-
Err(_) => Ok(None),
159-
}
160-
}
155+
Some(e) => match inner_text(e) {
156+
Ok(txt) => Ok(Some(try!(T::from_str_optional(txt)))),
157+
Err(_) => Ok(None),
158+
},
161159
None => Ok(None),
162160
}
163161
}

src/azure/cosmos/authorization_token.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use base64;
22

3-
use std::fmt::{Debug, Formatter, Error};
3+
use std::fmt::{Debug, Error, Formatter};
44

55
#[derive(Copy, Clone, Debug)]
66
pub enum TokenType {

0 commit comments

Comments
 (0)