azure_cosmos_mirror 0.3.0

Rust wrappers around Microsoft Azure REST APIs - Azure Cosmos DB
Documentation
use crate::prelude::*;
use crate::resources::permission::{
    ExpirySeconds, PermissionMode, PermissionResponse as CreatePermissionResponse,
};

operation! {
    CreatePermission,
    client: PermissionClient,
    permission_mode: PermissionMode,
    ?expiry_seconds: ExpirySeconds,
    ?consistency_level: ConsistencyLevel
}

impl CreatePermissionBuilder {
    pub fn into_future(self) -> CreatePermission {
        Box::pin(async move {
            let mut request = self.client.cosmos_client().request(
                &format!(
                    "dbs/{}/users/{}/permissions",
                    self.client.database_client().database_name(),
                    self.client.user_client().user_name()
                ),
                azure_core::Method::Post,
            );

            if let Some(cl) = &self.consistency_level {
                request.insert_headers(cl);
            }
            request.insert_headers(&self.expiry_seconds);

            #[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(serde_json::to_vec(&request_body)?);
            let response = self
                .client
                .pipeline()
                .send(
                    self.context.clone().insert(ResourceType::Permissions),
                    &mut request,
                )
                .await?;

            CreatePermissionResponse::try_from(response).await
        })
    }
}