use serde::{Deserialize, Serialize};
use super::common::Key;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct List {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub seed_count: Option<u32>,
#[serde(default)]
pub edition_count: Option<u32>,
#[serde(default)]
pub last_update: Option<String>,
#[serde(default)]
pub seeds: Option<Vec<ListSeed>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListSummary {
pub key: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub seed_count: Option<u32>,
#[serde(default)]
pub edition_count: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ListSeed {
Key(Key),
Subject { url: String, title: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserLists {
#[serde(default)]
pub lists: Vec<ListSummary>,
#[serde(default)]
pub size: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListEditions {
#[serde(default)]
pub entries: Vec<ListEditionEntry>,
#[serde(default)]
pub size: Option<u64>,
#[serde(default)]
pub links: Option<super::common::PaginationLinks>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListEditionEntry {
pub key: String,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub covers: Option<Vec<i64>>,
#[serde(default)]
pub publish_date: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListSubjects {
#[serde(default)]
pub subjects: Vec<ListSubjectEntry>,
#[serde(default)]
pub places: Vec<ListSubjectEntry>,
#[serde(default)]
pub people: Vec<ListSubjectEntry>,
#[serde(default)]
pub times: Vec<ListSubjectEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListSubjectEntry {
pub name: String,
#[serde(default)]
pub count: Option<u32>,
#[serde(default)]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListSeeds {
#[serde(default)]
pub entries: Vec<ListSeed>,
#[serde(default)]
pub size: Option<u64>,
}