use reqwest::Method;
use serde::{Deserialize, Serialize};
use snafu::ResultExt;
use crate::models::authorization::{Authorization, Authorizations, Status};
use crate::models::permission::Permission;
use crate::{Client, Http, RequestError, ReqwestProcessing, Serializing};
impl Client {
pub async fn list_authorizations(
&self,
request: ListAuthorizationsRequest,
) -> Result<Authorizations, RequestError> {
let url = self.url("/api/v2/authorizations");
let response = self
.request(Method::GET, &url)
.query(&request)
.send()
.await
.context(ReqwestProcessing)?;
if !response.status().is_success() {
let status = response.status();
let text = response.text().await.context(ReqwestProcessing)?;
let res = Http { status, text }.fail();
return res;
}
response.json().await.context(ReqwestProcessing)
}
pub async fn create_authorization(
&self,
request: CreateAuthorizationRequest,
) -> Result<Authorization, RequestError> {
let create_bucket_url = self.url("/api/v2/authorizations");
let response = self
.request(Method::POST, &create_bucket_url)
.body(serde_json::to_string(&request).context(Serializing)?)
.send()
.await
.context(ReqwestProcessing)?;
if !response.status().is_success() {
let status = response.status();
let text = response.text().await.context(ReqwestProcessing)?;
let res = Http { status, text }.fail();
return res;
}
response
.json::<Authorization>()
.await
.context(ReqwestProcessing)
}
}
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ListAuthorizationsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub org: Option<String>,
#[serde(rename = "orgID")]
#[serde(skip_serializing_if = "Option::is_none")]
pub org_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(rename = "userID")]
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateAuthorizationRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "orgID")]
pub org_id: String,
pub permissions: Vec<Permission>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<Status>,
#[serde(rename = "userID")]
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}