diff --git a/sdk/data_cosmos/examples/permission_00.rs b/sdk/data_cosmos/examples/permission_00.rs index 9f1e696212..e48bbf82a7 100644 --- a/sdk/data_cosmos/examples/permission_00.rs +++ b/sdk/data_cosmos/examples/permission_00.rs @@ -1,4 +1,3 @@ -use azure_core::prelude::*; use azure_data_cosmos::prelude::*; use std::error::Error; @@ -110,19 +109,16 @@ async fn main() -> Result<(), Box> { .unwrap(); println!("get_permission_response == {:#?}", get_permission_response); - let permission_mode = &get_permission_response.permission.permission_mode; + let permission_mode = get_permission_response.permission.permission_mode; // renew permission extending its validity for 60 seconds more. let replace_permission_response = permission_client - .replace_permission( - Context::new(), - ReplacePermissionOptions::new() - .expiry_seconds(600u64) - .consistency_level(ConsistencyLevel::Session( - get_permission_response.session_token, - )), - permission_mode, - ) + .replace_permission(permission_mode) + .expiry_seconds(600u64) + .consistency_level(ConsistencyLevel::Session( + get_permission_response.session_token, + )) + .into_future() .await .unwrap(); println!( diff --git a/sdk/data_cosmos/examples/stored_proc_01.rs b/sdk/data_cosmos/examples/stored_proc_01.rs index 345095feed..96a2341d20 100644 --- a/sdk/data_cosmos/examples/stored_proc_01.rs +++ b/sdk/data_cosmos/examples/stored_proc_01.rs @@ -54,8 +54,8 @@ async fn main() -> Result<(), Box> { ); let create_stored_procedure_response = stored_procedure_client - .create_stored_procedure() - .execute(function_body) + .create_stored_procedure(function_body) + .into_future() .await?; println!( "create_stored_procedure_response == {:#?}", diff --git a/sdk/data_cosmos/examples/user_00.rs b/sdk/data_cosmos/examples/user_00.rs index 5b065b870f..7cb2a65a08 100644 --- a/sdk/data_cosmos/examples/user_00.rs +++ b/sdk/data_cosmos/examples/user_00.rs @@ -1,4 +1,3 @@ -use azure_core::Context; use azure_data_cosmos::prelude::*; use futures::StreamExt; use std::error::Error; @@ -45,7 +44,8 @@ async fn main() -> Result<(), Box> { let new_user = format!("{}replaced", user_name); let replace_user_response = user_client - .replace_user(Context::new(), &new_user, ReplaceUserOptions::new()) + .replace_user(new_user.clone()) + .into_future() .await?; println!("replace_user_response == {:#?}", replace_user_response); diff --git a/sdk/data_cosmos/src/clients/permission_client.rs b/sdk/data_cosmos/src/clients/permission_client.rs index f317c89a1c..69a7e39142 100644 --- a/sdk/data_cosmos/src/clients/permission_client.rs +++ b/sdk/data_cosmos/src/clients/permission_client.rs @@ -1,9 +1,8 @@ use super::*; use crate::prelude::*; -use crate::resources::permission::{PermissionMode, PermissionResponse}; -use crate::resources::ResourceType; +use crate::resources::permission::PermissionMode; use crate::ReadonlyString; -use azure_core::{Context, Pipeline, Request}; +use azure_core::{Pipeline, Request}; /// A client for Cosmos permission resources. #[derive(Debug, Clone)] @@ -49,22 +48,8 @@ impl PermissionClient { } /// Replace the permission - pub async fn replace_permission( - &self, - ctx: Context, - options: ReplacePermissionOptions, - permission_mode: &PermissionMode, - ) -> crate::Result { - let mut request = self.prepare_request_with_permission_name(http::Method::PUT); - - options.decorate_request(&mut request, self.permission_name(), permission_mode)?; - - let response = self - .pipeline() - .send(ctx.clone().insert(ResourceType::Permissions), &mut request) - .await?; - - Ok(PermissionResponse::try_from(response).await?) + pub fn replace_permission(&self, permission_mode: PermissionMode) -> ReplacePermissionBuilder { + ReplacePermissionBuilder::new(self.clone(), permission_mode) } /// Get the permission diff --git a/sdk/data_cosmos/src/clients/stored_procedure_client.rs b/sdk/data_cosmos/src/clients/stored_procedure_client.rs index 894e92c6c6..b6bb79b6d0 100644 --- a/sdk/data_cosmos/src/clients/stored_procedure_client.rs +++ b/sdk/data_cosmos/src/clients/stored_procedure_client.rs @@ -1,7 +1,8 @@ use super::*; +use crate::prelude::*; use crate::resources::ResourceType; use crate::{requests, ReadonlyString}; -use azure_core::HttpClient; +use azure_core::{HttpClient, Pipeline, Request}; /// A client for Cosmos stored procedure resources. #[derive(Debug, Clone)] @@ -42,13 +43,19 @@ impl StoredProcedureClient { } /// Create the stored procedure - pub fn create_stored_procedure(&self) -> requests::CreateStoredProcedureBuilder<'_, '_> { - requests::CreateStoredProcedureBuilder::new(self) + pub fn create_stored_procedure>( + &self, + function_body: S, + ) -> CreateStoredProcedureBuilder { + CreateStoredProcedureBuilder::new(self.clone(), function_body.into()) } /// Replace the stored procedure - pub fn replace_stored_procedure(&self) -> requests::ReplaceStoredProcedureBuilder<'_, '_> { - requests::ReplaceStoredProcedureBuilder::new(self) + pub fn replace_stored_procedure>( + &self, + function_body: S, + ) -> ReplaceStoredProcedureBuilder { + ReplaceStoredProcedureBuilder::new(self.clone(), function_body.into()) } /// Execute the stored procedure @@ -61,23 +68,27 @@ impl StoredProcedureClient { requests::DeleteStoredProcedureBuilder::new(self) } - pub(crate) fn prepare_request(&self, method: http::Method) -> http::request::Builder { + pub(crate) fn prepare_request_with_stored_procedure_name( + &self, + method: http::Method, + ) -> http::request::Builder { self.cosmos_client().prepare_request( &format!( - "dbs/{}/colls/{}/sprocs", + "dbs/{}/colls/{}/sprocs/{}", self.database_client().database_name(), self.collection_client().collection_name(), + self.stored_procedure_name() ), method, ResourceType::StoredProcedures, ) } - pub(crate) fn prepare_request_with_stored_procedure_name( + pub(crate) fn prepare_pipeline_with_stored_procedure_name( &self, method: http::Method, - ) -> http::request::Builder { - self.cosmos_client().prepare_request( + ) -> Request { + self.cosmos_client().prepare_request_pipeline( &format!( "dbs/{}/colls/{}/sprocs/{}", self.database_client().database_name(), @@ -85,10 +96,24 @@ impl StoredProcedureClient { self.stored_procedure_name() ), method, - ResourceType::StoredProcedures, ) } + pub(crate) fn prepare_request_pipeline(&self, method: http::Method) -> Request { + self.cosmos_client().prepare_request_pipeline( + &format!( + "dbs/{}/colls/{}/sprocs", + self.database_client().database_name(), + self.collection_client().collection_name(), + ), + method, + ) + } + + pub(crate) fn pipeline(&self) -> &Pipeline { + self.cosmos_client().pipeline() + } + pub(crate) fn http_client(&self) -> &dyn HttpClient { self.cosmos_client().http_client() } diff --git a/sdk/data_cosmos/src/clients/user_client.rs b/sdk/data_cosmos/src/clients/user_client.rs index 6cb1ca45c5..dece8fa4e8 100644 --- a/sdk/data_cosmos/src/clients/user_client.rs +++ b/sdk/data_cosmos/src/clients/user_client.rs @@ -1,9 +1,7 @@ use super::*; use crate::prelude::*; -use crate::resources::user::UserResponse; -use crate::resources::ResourceType; use crate::{requests, ReadonlyString}; -use azure_core::{Context, HttpClient, Pipeline, Request}; +use azure_core::{HttpClient, Pipeline, Request}; /// A client for Cosmos user resources. #[derive(Debug, Clone)] @@ -49,21 +47,8 @@ impl UserClient { } /// Replace the user - pub async fn replace_user>( - &self, - ctx: Context, - user_name: S, - options: ReplaceUserOptions, - ) -> crate::Result { - let mut request = self.prepare_request_with_user_name(http::Method::PUT); - - options.decorate_request(&mut request, user_name.as_ref())?; - let response = self - .pipeline() - .send(ctx.clone().insert(ResourceType::Users), &mut request) - .await?; - - Ok(UserResponse::try_from(response).await?) + pub fn replace_user>(&self, user_name: S) -> ReplaceUserBuilder { + ReplaceUserBuilder::new(self.clone(), user_name.into()) } /// Delete the user diff --git a/sdk/data_cosmos/src/operations/create_stored_procedure.rs b/sdk/data_cosmos/src/operations/create_stored_procedure.rs new file mode 100644 index 0000000000..84bb2a5119 --- /dev/null +++ b/sdk/data_cosmos/src/operations/create_stored_procedure.rs @@ -0,0 +1,111 @@ +use crate::headers::from_headers::*; +use crate::prelude::*; +use crate::resources::StoredProcedure; +use crate::ResourceQuota; +use azure_core::headers::{etag_from_headers, session_token_from_headers}; +use azure_core::{collect_pinned_stream, Context, Response as HttpResponse}; +use chrono::{DateTime, Utc}; + +#[derive(Debug, Clone)] +pub struct CreateStoredProcedureBuilder { + client: StoredProcedureClient, + function_body: String, + consistency_level: Option, + context: Context, +} + +impl CreateStoredProcedureBuilder { + pub(crate) fn new(client: StoredProcedureClient, body: String) -> Self { + Self { + client, + function_body: body, + consistency_level: None, + context: Context::new(), + } + } + + setters! { + consistency_level: ConsistencyLevel => Some(consistency_level), + context: Context => context, + } + + pub fn into_future(self) -> CreateStoredProcedure { + Box::pin(async move { + let mut req = self.client.prepare_request_pipeline(http::Method::POST); + + azure_core::headers::add_optional_header2(&self.consistency_level, &mut req)?; + + #[derive(Debug, Serialize)] + struct Request<'a> { + body: &'a str, + id: &'a str, + } + let body = Request { + body: &self.function_body, + id: self.client.stored_procedure_name(), + }; + + req.set_body(bytes::Bytes::from(serde_json::to_string(&body)?).into()); + + let response = self + .client + .pipeline() + .send( + self.context.clone().insert(ResourceType::StoredProcedures), + &mut req, + ) + .await?; + CreateStoredProcedureResponse::try_from(response).await + }) + } +} + +#[cfg(feature = "into_future")] +impl std::future::IntoFuture for CreateStoredProcedureBuilder { + type Future = CreateStoredProcedure; + type Output = ::Output; + fn into_future(self) -> Self::Future { + Self::into_future(self) + } +} + +/// The future returned by calling `into_future` on the builder. +pub type CreateStoredProcedure = + futures::future::BoxFuture<'static, crate::Result>; + +/// A stored procedure response +#[derive(Debug, Clone, PartialEq)] +pub struct CreateStoredProcedureResponse { + pub stored_procedure: StoredProcedure, + pub charge: f64, + pub activity_id: uuid::Uuid, + pub etag: String, + pub session_token: String, + pub last_change: DateTime, + pub resource_quota: Vec, + pub resource_usage: Vec, + pub quorum_acked_lsn: u64, + pub current_write_quorum: u64, + pub current_replica_set_size: u64, +} + +impl CreateStoredProcedureResponse { + pub async fn try_from(response: HttpResponse) -> crate::Result { + let (_status_code, headers, pinned_stream) = response.deconstruct(); + let body = collect_pinned_stream(pinned_stream).await?; + + Ok(Self { + stored_procedure: serde_json::from_slice(&body)?, + charge: request_charge_from_headers(&headers)?, + activity_id: activity_id_from_headers(&headers)?, + etag: etag_from_headers(&headers)?, + session_token: session_token_from_headers(&headers)?, + last_change: last_state_change_from_headers(&headers)?, + resource_quota: resource_quota_from_headers(&headers)?, + resource_usage: resource_usage_from_headers(&headers)?, + quorum_acked_lsn: quorum_acked_lsn_from_headers(&headers)?, + current_write_quorum: current_write_quorum_from_headers(&headers)?, + current_replica_set_size: current_replica_set_size_from_headers(&headers)?, + }) + } +} diff --git a/sdk/data_cosmos/src/operations/mod.rs b/sdk/data_cosmos/src/operations/mod.rs index 459811afe7..bd94f33894 100644 --- a/sdk/data_cosmos/src/operations/mod.rs +++ b/sdk/data_cosmos/src/operations/mod.rs @@ -6,6 +6,7 @@ mod create_collection; mod create_database; mod create_document; mod create_permission; +mod create_stored_procedure; mod create_user; mod delete_collection; mod delete_database; @@ -23,12 +24,14 @@ mod list_users; mod replace_collection; mod replace_document; mod replace_permission; +mod replace_stored_procedure; mod replace_user; pub use create_collection::*; pub use create_database::*; pub use create_document::*; pub use create_permission::*; +pub use create_stored_procedure::*; pub use create_user::*; pub use delete_collection::*; pub use delete_database::*; @@ -46,4 +49,5 @@ pub use list_users::*; pub use replace_collection::*; pub use replace_document::*; pub use replace_permission::*; +pub use replace_stored_procedure::*; pub use replace_user::*; diff --git a/sdk/data_cosmos/src/operations/replace_permission.rs b/sdk/data_cosmos/src/operations/replace_permission.rs index d562fb477d..6556ada261 100644 --- a/sdk/data_cosmos/src/operations/replace_permission.rs +++ b/sdk/data_cosmos/src/operations/replace_permission.rs @@ -1,51 +1,80 @@ use crate::prelude::*; -use crate::resources::permission::{ExpirySeconds, PermissionMode}; +use crate::resources::permission::{ExpirySeconds, PermissionMode, PermissionResponse}; -use azure_core::Request as HttpRequest; +use azure_core::Context; #[derive(Debug, Clone)] -pub struct ReplacePermissionOptions { +pub struct ReplacePermissionBuilder { + client: PermissionClient, + permission_mode: PermissionMode, expiry_seconds: Option, consistency_level: Option, + context: Context, } -impl ReplacePermissionOptions { - pub fn new() -> Self { +impl ReplacePermissionBuilder { + pub(crate) fn new(client: PermissionClient, permission_mode: PermissionMode) -> Self { Self { + client, + permission_mode, expiry_seconds: Some(ExpirySeconds::new(3600)), consistency_level: None, + context: Context::new(), } } setters! { expiry_seconds: u64 => Some(ExpirySeconds::new(expiry_seconds)), consistency_level: ConsistencyLevel => Some(consistency_level), + context: Context => context, } - pub(crate) fn decorate_request( - &self, - request: &mut HttpRequest, - id: &str, - permission_mode: &PermissionMode, - ) -> crate::Result<()> { - azure_core::headers::add_optional_header2(&self.consistency_level, request)?; - azure_core::headers::add_optional_header2(&self.expiry_seconds, request)?; - - #[derive(Serialize, Deserialize)] - struct RequestBody<'x> { - id: &'x str, - #[serde(rename = "permissionMode")] - permission_mode: &'x str, - resource: &'x str, - } + pub fn into_future(self) -> ReplacePermission { + Box::pin(async move { + let mut request = self + .client + .prepare_request_with_permission_name(http::Method::PUT); + + azure_core::headers::add_optional_header2(&self.consistency_level, &mut request)?; + azure_core::headers::add_optional_header2(&self.expiry_seconds, &mut request)?; + + #[derive(Serialize, Deserialize)] + struct RequestBody<'x> { + id: &'x str, + #[serde(rename = "permissionMode")] + permission_mode: &'x str, + resource: &'x str, + } + + let request_body = RequestBody { + id: self.client.permission_name(), + permission_mode: self.permission_mode.kind(), + resource: self.permission_mode.resource(), + }; + + request.set_body(bytes::Bytes::from(serde_json::to_string(&request_body)?).into()); + let response = self + .client + .pipeline() + .send( + self.context.clone().insert(ResourceType::Permissions), + &mut request, + ) + .await?; + + PermissionResponse::try_from(response).await + }) + } +} - let request_body = RequestBody { - id, - permission_mode: permission_mode.kind(), - resource: permission_mode.resource(), - }; +/// The future returned by calling `into_future` on the builder. +pub type ReplacePermission = futures::future::BoxFuture<'static, crate::Result>; - request.set_body(bytes::Bytes::from(serde_json::to_string(&request_body)?).into()); - Ok(()) +#[cfg(feature = "into_future")] +impl std::future::IntoFuture for ReplacePermissionBuilder { + type Future = ReplacePermission; + type Output = ::Output; + fn into_future(self) -> Self::Future { + Self::into_future(self) } } diff --git a/sdk/data_cosmos/src/operations/replace_stored_procedure.rs b/sdk/data_cosmos/src/operations/replace_stored_procedure.rs new file mode 100644 index 0000000000..57dffccb4e --- /dev/null +++ b/sdk/data_cosmos/src/operations/replace_stored_procedure.rs @@ -0,0 +1,75 @@ +use super::CreateStoredProcedureResponse; +use crate::prelude::*; +use azure_core::prelude::*; + +#[derive(Debug, Clone)] +pub struct ReplaceStoredProcedureBuilder { + client: StoredProcedureClient, + function_body: String, + consistency_level: Option, + context: Context, +} + +impl ReplaceStoredProcedureBuilder { + pub(crate) fn new(client: StoredProcedureClient, function_body: String) -> Self { + Self { + client, + function_body, + consistency_level: None, + context: Context::new(), + } + } +} + +impl ReplaceStoredProcedureBuilder { + setters! { + consistency_level: ConsistencyLevel => Some(consistency_level), + } + + pub async fn into_future(self) -> ReplaceStoredProcedure { + Box::pin(async move { + let mut req = self + .client + .prepare_pipeline_with_stored_procedure_name(http::Method::PUT); + + azure_core::headers::add_optional_header2(&self.consistency_level, &mut req)?; + + #[derive(Debug, Serialize)] + struct Request<'a> { + body: &'a str, + id: &'a str, + } + let body = Request { + body: &self.function_body, + id: self.client.stored_procedure_name(), + }; + + req.set_body(bytes::Bytes::from(serde_json::to_string(&body)?).into()); + + let response = self + .client + .pipeline() + .send( + self.context.clone().insert(ResourceType::StoredProcedures), + &mut req, + ) + .await?; + ReplaceStoredProcedureResponse::try_from(response).await + }) + } +} + +#[cfg(feature = "into_future")] +impl std::future::IntoFuture for ReplaceStoredProcedureBuilder { + type Future = ReplaceStoredProcedure; + type Output = ::Output; + fn into_future(self) -> Self::Future { + Self::into_future(self) + } +} + +/// The future returned by calling `into_future` on the builder. +pub type ReplaceStoredProcedure = + futures::future::BoxFuture<'static, crate::Result>; + +pub type ReplaceStoredProcedureResponse = CreateStoredProcedureResponse; diff --git a/sdk/data_cosmos/src/operations/replace_user.rs b/sdk/data_cosmos/src/operations/replace_user.rs index d97189ed89..e5c9340b44 100644 --- a/sdk/data_cosmos/src/operations/replace_user.rs +++ b/sdk/data_cosmos/src/operations/replace_user.rs @@ -1,32 +1,51 @@ -use crate::prelude::*; -use azure_core::Request as HttpRequest; +use crate::{prelude::*, resources::user::UserResponse}; +use azure_core::Context; -#[derive(Debug, Clone, Default)] -pub struct ReplaceUserOptions { +#[derive(Debug, Clone)] +pub struct ReplaceUserBuilder { + client: UserClient, + user_name: String, consistency_level: Option, + context: Context, } -impl ReplaceUserOptions { - pub fn new() -> Self { +impl ReplaceUserBuilder { + pub(crate) fn new(client: UserClient, user_name: String) -> Self { Self { + client, + user_name, consistency_level: None, + context: Context::new(), } } setters! { consistency_level: ConsistencyLevel => Some(consistency_level), + context: Context => context, } - pub(crate) fn decorate_request( - &self, - request: &mut HttpRequest, - user_name: &str, - ) -> crate::Result<()> { - azure_core::headers::add_optional_header2(&self.consistency_level, request)?; - let body = ReplaceUserBody { id: user_name }; - request.set_body(bytes::Bytes::from(serde_json::to_string(&body)?).into()); + pub fn into_future(self) -> ReplaceUser { + Box::pin(async move { + let mut request = self + .client + .prepare_request_with_user_name(http::Method::PUT); - Ok(()) + azure_core::headers::add_optional_header2(&self.consistency_level, &mut request)?; + let body = ReplaceUserBody { + id: &self.user_name, + }; + request.set_body(bytes::Bytes::from(serde_json::to_string(&body)?).into()); + let response = self + .client + .pipeline() + .send( + self.context.clone().insert(ResourceType::Users), + &mut request, + ) + .await?; + + UserResponse::try_from(response).await + }) } } @@ -34,3 +53,15 @@ impl ReplaceUserOptions { struct ReplaceUserBody<'a> { id: &'a str, } + +/// The future returned by calling `into_future` on the builder. +pub type ReplaceUser = futures::future::BoxFuture<'static, crate::Result>; + +#[cfg(feature = "into_future")] +impl std::future::IntoFuture for ReplaceUserBuilder { + type Future = ReplaceUser; + type Output = ::Output; + fn into_future(self) -> Self::Future { + Self::into_future(self) + } +} diff --git a/sdk/data_cosmos/src/requests/create_stored_procedure_builder.rs b/sdk/data_cosmos/src/requests/create_stored_procedure_builder.rs deleted file mode 100644 index e331d4aa30..0000000000 --- a/sdk/data_cosmos/src/requests/create_stored_procedure_builder.rs +++ /dev/null @@ -1,71 +0,0 @@ -use crate::prelude::*; -use crate::responses::CreateStoredProcedureResponse; -use azure_core::prelude::*; -use http::StatusCode; -use std::convert::TryInto; - -#[derive(Debug, Clone)] -pub struct CreateStoredProcedureBuilder<'a, 'b> { - stored_procedure_client: &'a StoredProcedureClient, - user_agent: Option>, - activity_id: Option>, - consistency_level: Option, -} - -impl<'a, 'b> CreateStoredProcedureBuilder<'a, 'b> { - pub(crate) fn new(stored_procedure_client: &'a StoredProcedureClient) -> Self { - Self { - stored_procedure_client, - user_agent: None, - activity_id: None, - consistency_level: None, - } - } -} - -impl<'a, 'b> CreateStoredProcedureBuilder<'a, 'b> { - setters! { - user_agent: &'b str => Some(UserAgent::new(user_agent)), - activity_id: &'b str => Some(ActivityId::new(activity_id)), - consistency_level: ConsistencyLevel => Some(consistency_level), - } -} - -impl<'a, 'b> CreateStoredProcedureBuilder<'a, 'b> { - pub async fn execute>( - &self, - body: B, - ) -> crate::Result { - trace!("CreateStoredProcedureBuilder::execute called"); - - let req = self - .stored_procedure_client - .prepare_request(http::Method::POST); - - let req = azure_core::headers::add_optional_header(&self.user_agent, req); - let req = azure_core::headers::add_optional_header(&self.activity_id, req); - let req = azure_core::headers::add_optional_header(&self.consistency_level, req); - - let req = req.header(http::header::CONTENT_TYPE, "application/json"); - - #[derive(Debug, Serialize)] - struct Request<'a> { - body: &'a str, - id: &'a str, - } - let request = Request { - body: body.as_ref(), - id: self.stored_procedure_client.stored_procedure_name(), - }; - - let request = azure_core::to_json(&request)?; - let request = req.body(request)?; - - Ok(self - .stored_procedure_client - .http_client() - .execute_request_check_status(request, StatusCode::CREATED) - .await? - .try_into()?) - } -} diff --git a/sdk/data_cosmos/src/requests/mod.rs b/sdk/data_cosmos/src/requests/mod.rs index 818178b143..e5f78cf4c1 100644 --- a/sdk/data_cosmos/src/requests/mod.rs +++ b/sdk/data_cosmos/src/requests/mod.rs @@ -10,7 +10,6 @@ mod create_or_replace_trigger_builder; mod create_or_replace_user_defined_function_builder; mod create_reference_attachment_builder; mod create_slug_attachment_builder; -mod create_stored_procedure_builder; mod delete_attachment_builder; mod delete_stored_procedure_builder; mod delete_trigger_builder; @@ -27,13 +26,11 @@ mod list_user_defined_functions_builder; mod query_documents_builder; mod replace_reference_attachment_builder; mod replace_slug_attachment_builder; -mod replace_stored_procedure_builder; pub use create_or_replace_trigger_builder::CreateOrReplaceTriggerBuilder; pub use create_or_replace_user_defined_function_builder::CreateOrReplaceUserDefinedFunctionBuilder; pub use create_reference_attachment_builder::CreateReferenceAttachmentBuilder; pub use create_slug_attachment_builder::CreateSlugAttachmentBuilder; -pub use create_stored_procedure_builder::CreateStoredProcedureBuilder; pub use delete_attachment_builder::DeleteAttachmentBuilder; pub use delete_stored_procedure_builder::DeleteStoredProcedureBuilder; pub use delete_trigger_builder::DeleteTriggerBuilder; @@ -50,4 +47,3 @@ pub use list_user_defined_functions_builder::ListUserDefinedFunctionsBuilder; pub use query_documents_builder::QueryDocumentsBuilder; pub use replace_reference_attachment_builder::ReplaceReferenceAttachmentBuilder; pub use replace_slug_attachment_builder::ReplaceSlugAttachmentBuilder; -pub use replace_stored_procedure_builder::ReplaceStoredProcedureBuilder; diff --git a/sdk/data_cosmos/src/requests/replace_stored_procedure_builder.rs b/sdk/data_cosmos/src/requests/replace_stored_procedure_builder.rs deleted file mode 100644 index 276bf518b4..0000000000 --- a/sdk/data_cosmos/src/requests/replace_stored_procedure_builder.rs +++ /dev/null @@ -1,71 +0,0 @@ -use crate::prelude::*; -use crate::responses::ReplaceStoredProcedureResponse; -use azure_core::prelude::*; -use http::StatusCode; -use std::convert::TryInto; - -#[derive(Debug, Clone)] -pub struct ReplaceStoredProcedureBuilder<'a, 'b> { - stored_procedure_client: &'a StoredProcedureClient, - user_agent: Option>, - activity_id: Option>, - consistency_level: Option, -} - -impl<'a, 'b> ReplaceStoredProcedureBuilder<'a, 'b> { - pub(crate) fn new(stored_procedure_client: &'a StoredProcedureClient) -> Self { - Self { - stored_procedure_client, - user_agent: None, - activity_id: None, - consistency_level: None, - } - } -} - -impl<'a, 'b> ReplaceStoredProcedureBuilder<'a, 'b> { - setters! { - user_agent: &'b str => Some(UserAgent::new(user_agent)), - activity_id: &'b str => Some(ActivityId::new(activity_id)), - consistency_level: ConsistencyLevel => Some(consistency_level), - } -} - -impl<'a, 'b> ReplaceStoredProcedureBuilder<'a, 'b> { - pub async fn execute>( - &self, - body: B, - ) -> crate::Result { - trace!("ReplaceStoredProcedureBuilder::execute called"); - - let req = self - .stored_procedure_client - .prepare_request_with_stored_procedure_name(http::Method::PUT); - - let req = azure_core::headers::add_optional_header(&self.user_agent, req); - let req = azure_core::headers::add_optional_header(&self.activity_id, req); - let req = azure_core::headers::add_optional_header(&self.consistency_level, req); - - let req = req.header(http::header::CONTENT_TYPE, "application/json"); - - #[derive(Debug, Serialize)] - struct Request<'a> { - body: &'a str, - id: &'a str, - } - let request = Request { - body: body.as_ref(), - id: self.stored_procedure_client.stored_procedure_name(), - }; - - let request = azure_core::to_json(&request)?; - let request = req.body(request)?; - - Ok(self - .stored_procedure_client - .http_client() - .execute_request_check_status(request, StatusCode::OK) - .await? - .try_into()?) - } -} diff --git a/sdk/data_cosmos/src/responses/create_stored_procedure_response.rs b/sdk/data_cosmos/src/responses/create_stored_procedure_response.rs deleted file mode 100644 index 0cb6090d6e..0000000000 --- a/sdk/data_cosmos/src/responses/create_stored_procedure_response.rs +++ /dev/null @@ -1,44 +0,0 @@ -use crate::headers::from_headers::*; -use crate::resources::StoredProcedure; -use crate::ResourceQuota; -use azure_core::headers::{etag_from_headers, session_token_from_headers}; -use chrono::{DateTime, Utc}; -use http::response::Response; - -#[derive(Debug, Clone, PartialEq)] -pub struct CreateStoredProcedureResponse { - pub stored_procedure: StoredProcedure, - pub charge: f64, - pub activity_id: uuid::Uuid, - pub etag: String, - pub session_token: String, - pub last_change: DateTime, - pub resource_quota: Vec, - pub resource_usage: Vec, - pub quorum_acked_lsn: u64, - pub current_write_quorum: u64, - pub current_replica_set_size: u64, -} - -impl std::convert::TryFrom> for CreateStoredProcedureResponse { - type Error = crate::Error; - - fn try_from(response: Response) -> Result { - let headers = response.headers(); - let body = response.body(); - - Ok(Self { - stored_procedure: serde_json::from_slice(body)?, - charge: request_charge_from_headers(headers)?, - activity_id: activity_id_from_headers(headers)?, - etag: etag_from_headers(headers)?, - session_token: session_token_from_headers(headers)?, - last_change: last_state_change_from_headers(headers)?, - resource_quota: resource_quota_from_headers(headers)?, - resource_usage: resource_usage_from_headers(headers)?, - quorum_acked_lsn: quorum_acked_lsn_from_headers(headers)?, - current_write_quorum: current_write_quorum_from_headers(headers)?, - current_replica_set_size: current_replica_set_size_from_headers(headers)?, - }) - } -} diff --git a/sdk/data_cosmos/src/responses/mod.rs b/sdk/data_cosmos/src/responses/mod.rs index 678e8e0366..75df546d7d 100644 --- a/sdk/data_cosmos/src/responses/mod.rs +++ b/sdk/data_cosmos/src/responses/mod.rs @@ -5,7 +5,6 @@ mod create_collection_response; mod create_reference_attachment_response; mod create_slug_attachment_response; -mod create_stored_procedure_response; mod create_trigger_response; mod create_user_defined_function_response; mod delete_attachment_response; @@ -23,12 +22,10 @@ mod list_triggers_response; mod list_user_defined_functions_response; mod query_documents_response; mod replace_reference_attachment_response; -mod replace_stored_procedure_response; pub use create_collection_response::CreateCollectionResponse; pub use create_reference_attachment_response::CreateReferenceAttachmentResponse; pub use create_slug_attachment_response::CreateSlugAttachmentResponse; -pub use create_stored_procedure_response::CreateStoredProcedureResponse; pub use create_trigger_response::CreateTriggerResponse; pub use create_user_defined_function_response::CreateUserDefinedFunctionResponse; pub use delete_attachment_response::DeleteAttachmentResponse; @@ -51,4 +48,3 @@ pub use query_documents_response::{ QueryResponseMeta, QueryResult, }; pub use replace_reference_attachment_response::ReplaceReferenceAttachmentResponse; -pub use replace_stored_procedure_response::ReplaceStoredProcedureResponse; diff --git a/sdk/data_cosmos/src/responses/replace_stored_procedure_response.rs b/sdk/data_cosmos/src/responses/replace_stored_procedure_response.rs deleted file mode 100644 index b5361c212f..0000000000 --- a/sdk/data_cosmos/src/responses/replace_stored_procedure_response.rs +++ /dev/null @@ -1 +0,0 @@ -pub type ReplaceStoredProcedureResponse = crate::responses::CreateStoredProcedureResponse; diff --git a/sdk/data_cosmos/tests/user.rs b/sdk/data_cosmos/tests/user.rs index 753ade7e58..875359c505 100644 --- a/sdk/data_cosmos/tests/user.rs +++ b/sdk/data_cosmos/tests/user.rs @@ -2,7 +2,6 @@ use std::assert_eq; -use azure_core::Context; use azure_data_cosmos::prelude::*; use futures::stream::StreamExt; @@ -48,11 +47,8 @@ async fn users() { assert_eq!(retrieved_user.user.id, USER_NAME); let _replace_user_response = user_client - .replace_user( - Context::new(), - USER_NAME_REPLACED, - ReplaceUserOptions::new(), - ) + .replace_user(USER_NAME_REPLACED) + .into_future() .await .unwrap();