use serde::Deserialize;
use crate::post::Post;
#[derive(Debug, Clone, Deserialize)]
#[serde(transparent)]
pub struct Catalog(pub Vec<CatalogPage>);
#[derive(Debug, Clone, Deserialize)]
pub struct CatalogPage {
pub page: u32,
pub threads: Vec<CatalogThread>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CatalogThread {
#[serde(flatten)]
pub op: Post,
#[serde(default)]
pub last_replies: Vec<Post>,
}
impl Catalog {
pub fn pages(&self) -> &[CatalogPage] { &self.0 }
pub fn threads(&self) -> impl Iterator<Item = &CatalogThread> {
self.0.iter().flat_map(|p| p.threads.iter())
}
}
impl CatalogThread {
pub fn no(&self) -> u64 { self.op.no }
}