use reqwest::Method;
use serde::{Deserialize, Serialize};
use snafu::ResultExt;
use crate::models::Organizations;
use crate::{Client, Http, RequestError, ReqwestProcessing};
impl Client {
pub async fn list_organizations(
&self,
request: ListOrganizationRequest,
) -> Result<Organizations, RequestError> {
let url = self.url("/api/v2/orgs");
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;
}
let res = response
.json::<Organizations>()
.await
.context(ReqwestProcessing)?;
Ok(res)
}
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListOrganizationRequest {
pub descending: Option<bool>,
pub limit: Option<i64>,
pub offset: Option<i64>,
pub org: Option<String>,
#[serde(rename = "orgID")]
pub org_id: Option<String>,
#[serde(rename = "userID")]
pub user_id: Option<String>,
}
impl ListOrganizationRequest {
pub fn new() -> Self {
Self::default()
}
}
#[cfg(test)]
mod tests {
use super::*;
use mockito::mock;
#[tokio::test]
async fn list_buckets() {
let org_id = "0000111100001111".to_string();
let token = "some-token";
let mock_server = mock("GET", "/api/v2/orgs?limit=1&orgID=some-org")
.match_header("Authorization", format!("Token {}", token).as_str())
.create();
let client = Client::new(mockito::server_url(), &org_id, token);
let request = ListOrganizationRequest {
limit: Some(1),
org_id: Some("some-org".to_string()),
..ListOrganizationRequest::default()
};
let _result = client.list_organizations(request).await;
mock_server.assert();
}
}