#![allow(clippy::all)]
#![allow(missing_docs)]
#![allow(unused_imports)]
#![allow(unused_mut)]
use reqwest::Method;
use serde::Serialize;
use crate::error::{ApiError, Result};
use crate::http::HttpInner;
use crate::models;
#[derive(Debug, Clone)]
pub struct OrganizationsClient {
inner: HttpInner,
}
impl OrganizationsClient {
pub fn new(inner: HttpInner) -> Self {
Self { inner }
}
pub async fn create_organization(
&self,
body: &crate::models::CreateGroupReq,
) -> Result<serde_json::Value> {
let path = "/groups".to_string();
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::POST, url, body)
.await
}
pub async fn delete_organization(&self, group: String) -> Result<serde_json::Value> {
let path = format!("/{}", group);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn get_group(&self, group: String) -> Result<crate::models::OrganizationAccess> {
let path = format!("/{}", group);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::OrganizationAccess>(Method::GET, url)
.await
}
pub async fn get_group_setting(
&self,
slug: String,
) -> Result<crate::models::OrganizationSettingWithParent> {
let path = format!("/{}/-/settings", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::OrganizationSettingWithParent>(Method::GET, url)
.await
}
pub async fn get_groups_by_user_id(
&self,
username: String,
query: &GetGroupsByUserIDQuery,
) -> Result<crate::models::OrganizationUnion> {
let path = format!("/users/{}/groups", username);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref v) = query.search {
pairs.append_pair("search", v);
}
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<crate::models::OrganizationUnion>(Method::GET, url)
.await
}
pub async fn list_groups(
&self,
slug: String,
query: &ListGroupsQuery,
) -> Result<Vec<crate::models::OrganizationAccess>> {
let path = format!("/user/groups/{}", slug);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
if let Some(v) = query.access {
pairs.append_pair("access", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::OrganizationAccess>>(Method::GET, url)
.await
}
pub async fn list_subgroups(
&self,
slug: String,
query: &ListSubgroupsQuery,
) -> Result<Vec<crate::models::OrganizationUnion>> {
let path = format!("/{}/-/sub-groups", slug);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref v) = query.search {
pairs.append_pair("search", v);
}
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::OrganizationUnion>>(Method::GET, url)
.await
}
pub async fn list_top_groups(
&self,
query: &ListTopGroupsQuery,
) -> Result<Vec<crate::models::OrganizationAccess>> {
let path = "/user/groups".to_string();
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
if let Some(ref v) = query.search {
pairs.append_pair("search", v);
}
if let Some(ref v) = query.role {
pairs.append_pair("role", v);
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::OrganizationAccess>>(Method::GET, url)
.await
}
pub async fn transfer_group(
&self,
group: String,
body: &crate::models::TransferSlugReq,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/transfer", group);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::POST, url, body)
.await
}
pub async fn update_group_setting(
&self,
slug: String,
body: &crate::models::GroupSettingReq,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/settings", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::PUT, url, body)
.await
}
pub async fn update_organization(
&self,
group: String,
body: &crate::models::UpdateGroupReq,
) -> Result<serde_json::Value> {
let path = format!("/{}", group);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::PUT, url, body)
.await
}
pub async fn upload_logos(
&self,
group: String,
body: &crate::models::UploadRequestParams,
) -> Result<crate::models::UploadAssetsResponse> {
let path = format!("/{}/-/upload/logos", group);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::UploadAssetsResponse, _>(Method::POST, url, body)
.await
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct GetGroupsByUserIDQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl GetGroupsByUserIDQuery {
pub fn new() -> Self {
Self::default()
}
pub fn search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct ListGroupsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub access: Option<i64>,
}
impl ListGroupsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
pub fn access(mut self, v: impl Into<i64>) -> Self {
self.access = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct ListSubgroupsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListSubgroupsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct ListTopGroupsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
}
impl ListTopGroupsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
pub fn search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
pub fn role(mut self, v: impl Into<String>) -> Self {
self.role = Some(v.into());
self
}
}