use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResponse<T> {
#[serde(default)]
pub num_found: u64,
#[serde(default)]
pub start: u64,
#[serde(default)]
pub num_found_exact: bool,
#[serde(default)]
pub docs: Vec<T>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BookDoc {
pub key: String,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub subtitle: Option<String>,
#[serde(default)]
pub author_name: Option<Vec<String>>,
#[serde(default)]
pub author_key: Option<Vec<String>>,
#[serde(default)]
pub cover_i: Option<i64>,
#[serde(default)]
pub cover_edition_key: Option<String>,
#[serde(default)]
pub first_publish_year: Option<i32>,
#[serde(default)]
pub isbn: Option<Vec<String>>,
#[serde(default)]
pub lccn: Option<Vec<String>>,
#[serde(default)]
pub oclc: Option<Vec<String>>,
#[serde(default)]
pub ia: Option<Vec<String>>,
#[serde(default)]
pub has_fulltext: bool,
#[serde(default)]
pub public_scan_b: bool,
#[serde(default)]
pub edition_count: u32,
#[serde(default)]
pub language: Option<Vec<String>>,
#[serde(default)]
pub publisher: Option<Vec<String>>,
#[serde(default)]
pub subject: Option<Vec<String>>,
#[serde(default)]
pub subject_facet: Option<Vec<String>>,
#[serde(default)]
pub place: Option<Vec<String>>,
#[serde(default)]
pub person: Option<Vec<String>>,
#[serde(default)]
pub time: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AuthorDoc {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub alternate_names: Option<Vec<String>>,
#[serde(default)]
pub birth_date: Option<String>,
#[serde(default)]
pub death_date: Option<String>,
#[serde(default)]
pub top_work: Option<String>,
#[serde(default)]
pub work_count: Option<u32>,
#[serde(default)]
pub top_subjects: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SubjectDoc {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub subject_type: Option<String>,
#[serde(default)]
pub work_count: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListDoc {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub edition_count: Option<u32>,
#[serde(default)]
pub seed_count: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InsideDoc {
#[serde(default)]
pub ia: Option<String>,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub author: Option<String>,
#[serde(default)]
pub text: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct SearchParams {
pub q: Option<String>,
pub title: Option<String>,
pub author: Option<String>,
pub isbn: Option<String>,
pub subject: Option<String>,
pub place: Option<String>,
pub person: Option<String>,
pub language: Option<String>,
pub publisher: Option<String>,
pub page: Option<u32>,
pub limit: Option<u32>,
pub offset: Option<u32>,
pub sort: Option<String>,
pub fields: Option<String>,
pub lang: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct AuthorSearchParams {
pub q: Option<String>,
pub limit: Option<u32>,
pub offset: Option<u32>,
}
#[derive(Debug, Clone, Default)]
pub struct SubjectParams {
pub details: Option<bool>,
pub ebooks: Option<bool>,
pub published_in: Option<String>,
pub limit: Option<u32>,
pub offset: Option<u32>,
}