use derive_builder::Builder;
use serde::Serialize;
use serde_with::skip_serializing_none;
use uuid::Uuid;
use crate::schema::author::*;
use crate::schema::NoData;
use crate::schema::PaginationQuery;
use crate::Result;
#[skip_serializing_none]
#[derive(Debug, Serialize, Clone, Builder, Default)]
#[serde(rename_all = "camelCase")]
#[builder(setter(strip_option), default)]
pub struct ListAuthors<'a> {
#[serde(flatten)]
pub pagination: PaginationQuery,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[builder(setter(each = "add_id"))]
pub ids: Vec<&'a Uuid>,
pub name: Option<&'a str>,
pub order: Option<AuthorOrder>,
}
impl_endpoint! {
GET "/author",
#[query] ListAuthors<'_>,
AuthorList
}
#[derive(Debug, Serialize, Clone)]
pub struct CreateAuthor<'a> {
pub name: &'a str,
pub version: i32,
}
impl_endpoint! {
POST "/author",
#[body auth] CreateAuthor<'_>,
#[flatten_result] AuthorResponse
}
#[derive(Debug, Clone)]
pub struct GetAuthor<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
GET ("/author/{:x}", id),
#[no_data] GetAuthor<'_>,
#[flatten_result] AuthorResponse
}
#[derive(Debug, Serialize, Clone)]
pub struct UpdateAuthor<'a> {
#[serde(skip)]
pub id: &'a Uuid,
pub name: &'a str,
pub version: i32,
}
impl_endpoint! {
PUT ("/author/{:x}", id),
#[body auth] UpdateAuthor<'_>,
#[flatten_result] AuthorResponse
}
#[derive(Debug, Clone)]
pub struct DeleteAuthor<'a> {
pub id: &'a Uuid,
}
impl_endpoint! {
DELETE ("/author/{:x}", id),
#[no_data auth] DeleteAuthor<'_>,
#[discard_result] Result<NoData>
}