use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subject {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub subject_type: Option<String>,
#[serde(default)]
pub work_count: Option<u64>,
#[serde(default)]
pub works: Vec<SubjectWork>,
#[serde(default)]
pub authors: Option<Vec<SubjectAuthor>>,
#[serde(default)]
pub publishers: Option<Vec<SubjectPublisher>>,
#[serde(default)]
pub related_subjects: Option<Vec<RelatedSubject>>,
#[serde(default)]
pub publishing_history: Option<Vec<(i32, u64)>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectWork {
pub key: String,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub cover_id: Option<i64>,
#[serde(default)]
pub cover_edition_key: Option<String>,
#[serde(default)]
pub edition_count: Option<u32>,
#[serde(default)]
pub has_fulltext: bool,
#[serde(default)]
pub public_scan: bool,
#[serde(default)]
pub ia: Option<String>,
#[serde(default)]
pub authors: Option<Vec<SubjectWorkAuthor>>,
#[serde(default)]
pub first_publish_year: Option<i32>,
#[serde(default)]
pub subject: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectWorkAuthor {
pub key: String,
#[serde(default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectAuthor {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub count: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectPublisher {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub count: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RelatedSubject {
pub name: String,
#[serde(default)]
pub url: Option<String>,
}