extern crate azure_sdk_for_rust;
extern crate chrono;
extern crate futures;
extern crate hyper;
extern crate tokio_core;
use azure_sdk_for_rust::cosmos::{AuthorizationToken, Client, TokenType};
use futures::future::*;
use std::error::Error;
use tokio_core::reactor::Core;
#[macro_use]
extern crate serde_derive;
use azure_sdk_for_rust::cosmos;
#[derive(Serialize, Deserialize, Debug)]
struct MySampleStruct<'a> {
id: &'a str,
a_string: &'a str,
a_number: u64,
a_timestamp: i64,
}
const DATABASE: &str = "azuresdktestdb";
const COLLECTION: &str = "azuresdktc";
fn main() {
code().unwrap();
}
fn code() -> Result<(), Box<Error>> {
let master_key = std::env::var("COSMOS_MASTER_KEY").expect("Set env variable COSMOS_MASTER_KEY first!");
let account = std::env::var("COSMOS_ACCOUNT").expect("Set env variable COSMOS_ACCOUNT first!");
let authorization_token = AuthorizationToken::new(account, TokenType::Master, &master_key)?;
let mut core = Core::new()?;
let client = Client::new(authorization_token)?;
let future = client
.list_databases()
.and_then(|databases| ok(databases.into_iter().find(|db| db.id == DATABASE)));
let database = match core.run(future)? {
Some(db) => db,
None => core.run(client.create_database(DATABASE))?,
};
println!("database == {:?}", database);
let collection = {
let collections = core.run(client.list_collections(&database.id))?;
if let Some(collection) = collections.into_iter().find(|coll| coll.id == COLLECTION) {
collection
} else {
let indexes = cosmos::collection::IncludedPathIndex {
kind: cosmos::collection::KeyKind::Hash,
data_type: cosmos::collection::DataType::String,
precision: Some(3),
};
let ip = cosmos::collection::IncludedPath {
path: "/*".to_owned(),
indexes: vec![indexes],
};
let ip = cosmos::collection::IndexingPolicy {
automatic: true,
indexing_mode: cosmos::collection::IndexingMode::Consistent,
included_paths: vec![ip],
excluded_paths: vec![],
};
let coll = cosmos::collection::Collection::new(COLLECTION, ip);
core.run(client.create_collection(&database.id, 400, &coll))?
}
};
println!("collection = {:?}", collection);
let doc = MySampleStruct {
id: "unique_id1",
a_string: "Something here",
a_number: 100,
a_timestamp: chrono::Utc::now().timestamp(),
};
let document_attributes = core.run(client.create_document(&database.id, &collection.id, &doc).execute())?;
println!("document_attributes == {:?}", document_attributes);
core.run(client.delete_collection(DATABASE, COLLECTION))?;
println!("collection deleted");
core.run(client.delete_database(DATABASE))?;
println!("database deleted");
Ok(())
}