use serde::{Deserialize, Serialize};
use super::common::{Key, Link, TextOrValue};
use super::work::DateValue;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Author {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub personal_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 bio: Option<TextOrValue>,
#[serde(default)]
pub location: Option<String>,
#[serde(default)]
pub photos: Option<Vec<i64>>,
#[serde(default)]
pub links: Option<Vec<Link>>,
#[serde(default)]
pub wikipedia: Option<String>,
#[serde(default)]
pub created: Option<DateValue>,
#[serde(default)]
pub last_modified: Option<DateValue>,
#[serde(default)]
pub latest_revision: Option<i64>,
#[serde(default)]
pub revision: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthorSummary {
pub key: String,
#[serde(default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthorWorks {
#[serde(default)]
pub entries: Vec<AuthorWorkEntry>,
#[serde(default)]
pub links: Option<super::common::PaginationLinks>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthorWorkEntry {
pub key: String,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub covers: Option<Vec<i64>>,
#[serde(default)]
pub authors: Option<Vec<Key>>,
#[serde(default)]
pub first_publish_date: Option<String>,
#[serde(default)]
pub subjects: Option<Vec<String>>,
}