use chrono::NaiveDate; use serde::{Deserialize, Serialize}; use super::date::naive_date_serializer; use super::{author::Author, genre::Genre, sequence::Sequence, source::Source}; fn default_langs() -> Vec { vec!["ru".to_string(), "be".to_string(), "uk".to_string()] } #[derive(Deserialize)] pub struct BookFilter { #[serde(default = "default_langs")] pub allowed_langs: Vec, pub is_deleted: Option, pub uploaded_gte: Option, pub uploaded_lte: Option, pub id_gte: Option, pub id_lte: Option, } #[derive(Serialize)] pub struct RemoteBook { pub id: i32, pub title: String, pub lang: String, pub file_type: String, pub year: i32, pub available_types: Vec, #[serde(serialize_with = "naive_date_serializer::serialize")] pub uploaded: NaiveDate, pub authors: Vec, pub translators: Vec, pub sequences: Vec, pub annotation_exists: bool, pub source: Source, pub remote_id: i32, } #[derive(Serialize)] pub struct BaseBook { pub id: i32, pub available_types: Vec, } #[derive(Serialize)] pub struct DetailBook { pub id: i32, pub title: String, pub lang: String, pub file_type: String, pub year: i32, pub available_types: Vec, #[serde(serialize_with = "naive_date_serializer::serialize")] pub uploaded: NaiveDate, pub authors: Vec, pub translators: Vec, pub sequences: Vec, pub annotation_exists: bool, pub source: Source, pub remote_id: i32, pub genres: Vec, pub is_deleted: bool, pub pages: Option, } #[derive(Deserialize)] pub struct RandomBookFilter { pub allowed_langs: Vec, pub genre: Option, } #[derive(Serialize)] pub struct Book { pub id: i32, pub title: String, pub lang: String, pub file_type: String, pub year: i32, pub available_types: Vec, #[serde(serialize_with = "naive_date_serializer::serialize")] pub uploaded: NaiveDate, pub authors: Vec, pub translators: Vec, pub sequences: Vec, pub annotation_exists: bool, }