use std::error::Error;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct Group {
#[serde(skip_serializing_if = "Option::is_none")]
id: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
default: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
active: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
creator_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
member_count: Option<u32>,
}
impl Group {
pub fn new() -> Self {
Group {
id: None,
name: None,
default: None,
active: None,
creator_id: None,
member_count: None,
}
}
pub fn template() -> Self {
Group {
id: Some(0),
name: Some(String::from("Group Name")),
default: Some(false),
active: Some(true),
creator_id: Some(String::from("0")),
member_count: Some(0),
}
}
}
impl super::Client {
pub async fn get_groups(
&self,
limit: Option<u32>,
offset: Option<u32>,
) -> Result<Vec<Group>, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
#[derive(Serialize)]
struct ListParams {
pub limit: Option<u32>,
pub offset: Option<u32>,
}
let q = ListParams { limit, offset };
let mut response = surf::get(&format!("{}{}", self.host, "/v1/groups"))
.query(&q)?
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn post_group(
&self,
group: Group,
) -> Result<Group, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::post(&format!("{}{}", self.host, "/v1/groups"))
.header("Authorization", at)
.body(surf::Body::from_json(&group)?)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn get_group(
&self,
id: &str,
) -> Result<Group, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::get(&format!("{}{}{}", self.host, "/v1/groups/", id))
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn put_group(
&self,
id: &str,
group: Group,
) -> Result<Group, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::put(&format!("{}{}{}", self.host, "/v1/groups/", id))
.header("Authorization", at)
.body(surf::Body::from_json(&group)?)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn delete_group(
&self,
id: &str,
) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::delete(&format!("{}{}{}", self.host, "/v1/groups/", id))
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn get_group_users(
&self,
id: &str,
) -> Result<Vec<u64>, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::get(&format!("{}{}{}{}", self.host, "/v1/groups/", id, "/users"))
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn put_group_user(
&self,
group_id: &str,
user_id: &str,
) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::put(&format!(
"{}{}{}{}{}",
self.host, "/v1/groups/", group_id, "/users/", user_id
))
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
pub async fn delete_group_user(
&self,
group_id: &str,
user_id: &str,
) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("user").await?;
let mut response = surf::delete(&format!(
"{}{}{}{}{}",
self.host, "/v1/groups/", group_id, "/users/", user_id
))
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
}