Skip to content
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

More Refactoring #103

Merged
merged 12 commits into from
Nov 30, 2020
2 changes: 1 addition & 1 deletion sdk/core/src/prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ pub use crate::{
ContentLengthOption, ContentLengthRequired, ContentLengthSupport, ContentMD5Option,
ContentMD5Support, ContentTypeOption, ContentTypeRequired, ContentTypeSupport,
ContinuationOption, ContinuationSupport, DeleteSnapshotsMethod, DeleteSnapshotsMethodSupport,
DelimiterOption, DelimiterSupport, IfMatchConditionOption, IfMatchConditionSupport,
DelimiterOption, DelimiterSupport, HttpClient, IfMatchConditionOption, IfMatchConditionSupport,
IfModifiedSinceOption, IfModifiedSinceSupport, IfSinceConditionOption, IfSinceConditionSupport,
IfSourceMatchConditionOption, IfSourceMatchConditionSupport, IfSourceSinceConditionOption,
IfSourceSinceConditionSupport, IncludeCopyOption, IncludeCopySupport, IncludeDeletedOption,
Expand Down
2 changes: 1 addition & 1 deletion sdk/cosmos/examples/create_delete_database.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use azure_core::HttpClient;
use azure_cosmos::prelude::*;
use azure_cosmos::resources::collection::*;
use collection::*;
use futures::stream::StreamExt;
use std::error::Error;
use std::sync::Arc;
Expand Down
20 changes: 10 additions & 10 deletions sdk/cosmos/examples/permission_00.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {

let list_permissions_response = user_client
.list_permissions()
.with_consistency_level(ConsistencyLevel::from(
&create_permission2_response.session_token,
.with_consistency_level(ConsistencyLevel::Session(
create_permission2_response.session_token,
))
.execute()
.await?;
Expand All @@ -97,8 +97,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {

let get_permission_response = permission_client
.get_permission()
.with_consistency_level(ConsistencyLevel::from(
&list_permissions_response.session_token,
.with_consistency_level(ConsistencyLevel::Session(
list_permissions_response.session_token,
))
.execute()
.await?;
Expand All @@ -111,8 +111,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
let replace_permission_response = permission_client
.replace_permission()
.with_expiry_seconds(60)
.with_consistency_level(ConsistencyLevel::from(
&get_permission_response.session_token,
.with_consistency_level(ConsistencyLevel::Session(
get_permission_response.session_token,
))
.execute_with_permission(permission_mode)
.await?;
Expand All @@ -123,8 +123,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {

let delete_permission_response = permission_client
.delete_permission()
.with_consistency_level(ConsistencyLevel::from(
&replace_permission_response.session_token,
.with_consistency_level(ConsistencyLevel::Session(
replace_permission_response.session_token,
))
.execute()
.await?;
Expand All @@ -135,8 +135,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {

let delete_user_response = user_client
.delete_user()
.with_consistency_level(ConsistencyLevel::from(
&delete_permission_response.session_token,
.with_consistency_level(ConsistencyLevel::Session(
delete_permission_response.session_token,
))
.execute()
.await?;
Expand Down
1 change: 0 additions & 1 deletion sdk/cosmos/examples/query_document_00.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use azure_core::HttpClient;
use azure_cosmos::prelude::*;
use azure_cosmos::responses::QueryDocumentsResponse;
use azure_cosmos::Query;
use serde::{Deserialize, Serialize};
use std::error::Error;
use std::sync::Arc;
Expand Down
4 changes: 2 additions & 2 deletions sdk/cosmos/examples/readme.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
// wow that was easy and fast, wasnt'it? :)
println!("Done!");

let session_token = ConsistencyLevel::from(session_token.unwrap());
let session_token = ConsistencyLevel::Session(session_token.unwrap());

// TASK 2
{
Expand Down Expand Up @@ -131,7 +131,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
});

// TASK 4
let session_token = ConsistencyLevel::from(query_documents_response.session_token.clone());
let session_token = ConsistencyLevel::Session(query_documents_response.session_token);
for ref document in query_documents_response.results {
// From our query above we are sure to receive a Document.
println!(
Expand Down
2 changes: 1 addition & 1 deletion sdk/cosmos/examples/trigger_00.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
"List loop received {} items. Object:\n{:#?}",
ret.item_count, ret
);
last_session_token = Some(ret.session_token.into());
last_session_token = Some(ConsistencyLevel::Session(ret.session_token));
}

let ret = trigger_client
Expand Down
36 changes: 25 additions & 11 deletions sdk/cosmos/src/clients/attachment_client.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use crate::requests;
use crate::{ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::ReadonlyString;
use azure_core::{HttpClient, No};

use super::*;

/// A client for Cosmos attachment resources.
#[derive(Debug, Clone)]
pub struct AttachmentClient {
document_client: DocumentClient,
Expand All @@ -21,55 +23,67 @@ impl AttachmentClient {
}
}

/// Get a [`CosmosClient`].
pub fn cosmos_client(&self) -> &CosmosClient {
self.document_client().cosmos_client()
}

/// Get a [`DatabaseClient`].
pub fn database_client(&self) -> &DatabaseClient {
self.document_client().database_client()
}

/// Get a [`CollectionClient`].
pub fn collection_client(&self) -> &CollectionClient {
self.document_client().collection_client()
}

/// Get a [`DocumentClient`].
pub fn document_client(&self) -> &DocumentClient {
&self.document_client
}

/// Get a raw [`HttpClient`].
pub fn http_client(&self) -> &dyn HttpClient {
self.cosmos_client().http_client()
}

/// Get the attachment name.
pub fn attachment_name(&self) -> &str {
&self.attachment_name
}

/// Initiate a request to get an attachment.
pub fn get(&self) -> requests::GetAttachmentBuilder<'_, '_> {
requests::GetAttachmentBuilder::new(self)
}

/// Initiate a request to delete an attachment.
pub fn delete(&self) -> requests::DeleteAttachmentBuilder<'_, '_> {
requests::DeleteAttachmentBuilder::new(self)
}

/// Initiate a request to create an attachment with a slug.
pub fn create_slug(&self) -> requests::CreateSlugAttachmentBuilder<'_, '_, No, No> {
requests::CreateSlugAttachmentBuilder::new(self)
}

/// Initiate a request to replace an attachment.
pub fn replace_slug(&self) -> requests::ReplaceSlugAttachmentBuilder<'_, '_, No, No> {
requests::ReplaceSlugAttachmentBuilder::new(self)
}

/// Initiate a request to create an attachment.
pub fn create_reference(&self) -> requests::CreateReferenceAttachmentBuilder<'_, '_, No, No> {
requests::CreateReferenceAttachmentBuilder::new(self)
}

/// Initiate a request to replace an attachment.
pub fn replace_reference(&self) -> requests::ReplaceReferenceAttachmentBuilder<'_, '_, No, No> {
requests::ReplaceReferenceAttachmentBuilder::new(self)
}

pub fn delete(&self) -> requests::DeleteAttachmentBuilder<'_, '_> {
requests::DeleteAttachmentBuilder::new(self)
}

pub fn get(&self) -> requests::GetAttachmentBuilder<'_, '_> {
requests::GetAttachmentBuilder::new(self)
}

pub fn prepare_request(&self, method: http::Method) -> http::request::Builder {
pub(crate) fn prepare_request(&self, method: http::Method) -> http::request::Builder {
self.cosmos_client().prepare_request(
&format!(
"dbs/{}/colls/{}/docs/{}/attachments",
Expand All @@ -82,7 +96,7 @@ impl AttachmentClient {
)
}

pub fn prepare_request_with_attachment_name(
pub(crate) fn prepare_request_with_attachment_name(
&self,
method: http::Method,
) -> http::request::Builder {
Expand Down
4 changes: 3 additions & 1 deletion sdk/cosmos/src/clients/collection_client.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use super::{DatabaseClient, UserDefinedFunctionClient};
use crate::clients::*;
use crate::requests;
use crate::{PartitionKeys, ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{PartitionKeys, ReadonlyString};
use azure_core::{HttpClient, No};

/// A client for Cosmos collection resources.
#[derive(Debug, Clone)]
pub struct CollectionClient {
database_client: DatabaseClient,
Expand Down
7 changes: 4 additions & 3 deletions sdk/cosmos/src/clients/cosmos_client.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use super::DatabaseClient;
use crate::headers::*;
use crate::resources::permission::AuthorizationToken;
use crate::{requests, ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};

use azure_core::{HttpClient, No};
use http::request::Builder as RequestBuilder;
Expand All @@ -17,6 +18,7 @@ const AZURE_VERSION: &str = "2018-12-31";
const VERSION: &str = "1.0";
const TIME_FORMAT: &str = "%a, %d %h %Y %T GMT";

/// A plain Cosmos client.
#[derive(Debug, Clone)]
pub struct CosmosClient {
http_client: Arc<Box<dyn HttpClient>>,
Expand Down Expand Up @@ -118,7 +120,7 @@ impl CosmosClient {
requests::ListDatabasesBuilder::new(self)
}

pub fn prepare_request(
pub(crate) fn prepare_request(
&self,
uri_path: &str,
http_method: http::Method,
Expand Down Expand Up @@ -301,7 +303,6 @@ impl CloudLocation {
#[cfg(test)]
mod tests {
use super::*;
use crate::*;

#[test]
fn string_to_sign_00() {
Expand Down
4 changes: 3 additions & 1 deletion sdk/cosmos/src/clients/database_client.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
use super::*;
use crate::requests;
use crate::{ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::ReadonlyString;
use azure_core::{HttpClient, No};

/// A client for Cosmos database resources.
#[derive(Debug, Clone)]
pub struct DatabaseClient {
cosmos_client: CosmosClient,
Expand Down
5 changes: 3 additions & 2 deletions sdk/cosmos/src/clients/document_client.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use super::{AttachmentClient, CollectionClient, CosmosClient, DatabaseClient};
use crate::requests;
use crate::{PartitionKeys, ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, PartitionKeys, ReadonlyString};
use azure_core::HttpClient;

/// A client for Cosmos document resources.
#[derive(Debug, Clone)]
pub struct DocumentClient {
collection_client: CollectionClient,
Expand Down
22 changes: 22 additions & 0 deletions sdk/cosmos/src/clients/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
//! Clients for interacting with Cosmos resources.
//!
//! Each resource has its own client, meaning if you want to interact with Attachments, for example,
//! you need to use the [`AttachmentClient`].
//!
//! # Example
//!
//! ```no_run
//! use azure_cosmos::prelude::*;
//! use azure_core::HttpClient;
//! use std::sync::Arc;
//!
//! let account = todo!("Get Cosmos account name from the Azure Portal");
//! let authorization_token = todo!("Get Cosmos authorization token from the Azure Portal");
//! let database_name: String = todo!("Think of some database name");
//!
//! // Create an http client, then a `CosmosClient`, and then a `DatabaseClient`
//! let http_client: Arc<Box<dyn HttpClient>> = Arc::new(Box::new(reqwest::Client::new()));
//! let client = CosmosClient::new(http_client, account, authorization_token);
//! let client = client.into_database_client(database_name);
//! ```

mod attachment_client;
mod collection_client;
mod cosmos_client;
Expand Down
4 changes: 3 additions & 1 deletion sdk/cosmos/src/clients/permission_client.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use super::*;
use crate::{requests, ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};
use azure_core::HttpClient;

/// A client for Cosmos permission resources.
#[derive(Debug, Clone)]
pub struct PermissionClient {
user_client: UserClient,
Expand Down
5 changes: 3 additions & 2 deletions sdk/cosmos/src/clients/stored_procedure_client.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use super::*;
use crate::requests;
use crate::{ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};
use azure_core::{HttpClient, No};

/// A client for Cosmos stored procedure resources.
#[derive(Debug, Clone)]
pub struct StoredProcedureClient {
collection_client: CollectionClient,
Expand Down
5 changes: 3 additions & 2 deletions sdk/cosmos/src/clients/trigger_client.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use super::*;
use crate::requests;
use crate::{ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};
use azure_core::{HttpClient, No};

/// A client for Cosmos trigger resources.
#[derive(Debug, Clone)]
pub struct TriggerClient {
collection_client: CollectionClient,
Expand Down
4 changes: 3 additions & 1 deletion sdk/cosmos/src/clients/user_client.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use super::*;
use crate::{requests, ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};
use azure_core::{HttpClient, No};

/// A client for Cosmos user resources.
#[derive(Debug, Clone)]
pub struct UserClient {
database_client: DatabaseClient,
Expand Down
5 changes: 3 additions & 2 deletions sdk/cosmos/src/clients/user_defined_function_client.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use super::*;
use crate::requests;
use crate::{ReadonlyString, ResourceType};
use crate::resources::ResourceType;
use crate::{requests, ReadonlyString};
use azure_core::{HttpClient, No};

/// A client for Cosmos user defined function resources.
#[derive(Debug, Clone)]
pub struct UserDefinedFunctionClient {
collection_client: CollectionClient,
Expand Down
Loading