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 qs = serde_qs::to_string(&request).unwrap();
let mut endpoint = "/api/v2/orgs".to_owned();
if !qs.is_empty() {
endpoint.push_str("?");
endpoint.push_str(&qs);
}
let url = self.url(&endpoint);
let response = self
.request(Method::GET, &url)
.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::*;
#[test]
fn serialize_list_organization_request() {
let req = ListOrganizationRequest::new();
let qs = serde_qs::to_string(&req).unwrap();
assert_eq!(qs, "");
let mut req = ListOrganizationRequest::new();
req.org = Some("Sahamee".to_owned());
let qs = serde_qs::to_string(&req).unwrap();
assert_eq!(qs, "org=Sahamee");
}
}