use crate::{schema::NoData, Result};
use derive_builder::Builder;
use serde::Serialize;
use uuid::Uuid;
use crate::schema::group::*;
#[derive(Debug, Serialize, Builder, Default)]
#[builder(setter(strip_option), default)]
pub struct ListGroups<'a> {
pub limit: Option<i32>,
pub offset: Option<i32>,
#[builder(setter(each = "add_group"))]
#[serde(rename = "ids")]
pub group_ids: Vec<&'a Uuid>,
pub name: Option<&'a str>,
}
impl_endpoint! {
GET "/group",
#[query] ListGroups<'_>,
ScanlationGroupList
}
#[derive(Debug, Serialize, Clone, Builder)]
#[builder(setter(strip_option))]
pub struct CreateGroup<'a> {
pub name: &'a str,
pub leader: &'a Uuid,
#[builder(setter(each = "add_member"))]
pub members: Vec<&'a Uuid>,
pub version: i32,
}
impl_endpoint! {
POST "/group",
#[body auth] CreateGroup<'_>,
#[flatten_result] Result<ScanlationGroupData>
}
pub struct ViewGroup<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
GET ("/group/{:x}", id),
#[no_data] ViewGroup<'_>,
#[flatten_result] Result<ScanlationGroupData>
}
#[derive(Debug, Serialize, Clone, Builder)]
#[builder(setter(strip_option))]
pub struct UpdateGroup<'a> {
pub id: &'a Uuid,
pub name: &'a str,
pub leader: Uuid,
#[builder(setter(each = "add_member"))]
pub members: Vec<Uuid>,
pub version: i32,
}
impl_endpoint! {
PUT ("/group/{:x}", id),
#[body auth] UpdateGroup<'_>,
#[flatten_result] Result<ScanlationGroupData>
}
pub struct DeleteGroup<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
DELETE ("/group/{:x}", id),
#[no_data auth] DeleteGroup<'_>,
#[discard_result] Result<NoData>
}
pub struct FollowGroup<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
POST ("/group/{:x}/follow", id),
#[no_data auth] FollowGroup<'_>,
#[discard_result] Result<NoData>
}
pub struct UnfollowGroup<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
DELETE ("/group/{:x}/follow", id),
#[no_data auth] UnfollowGroup<'_>,
#[discard_result] Result<NoData>
}
#[cfg(test)]
mod tests {
use crate::Client;
use super::*;
use pretty_assertions::assert_eq;
#[tokio::test]
async fn list_group() {
let client = Client::default();
let groups = ListGroupsBuilder::default()
.build()
.unwrap()
.send(&client)
.await
.unwrap();
assert_eq!(groups.offset, 0);
assert_eq!(groups.limit, 10);
}
}