use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::context::RenderDocumentElement; use crate::context::RenderRealFootnoteDefinition; use crate::error::CustomError; use crate::intermediate::get_web_path; use crate::intermediate::BlogPost; use super::GlobalSettings; use super::PageHeader; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "blog_stream")] pub(crate) struct RenderBlogStream { global_settings: GlobalSettings, page_header: Option, children: Vec, older_link: Option, newer_link: Option, } impl RenderBlogStream { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, original: &[&BlogPost], older_link: Option, newer_link: Option, ) -> Result { let css_files = vec![ // get_web_path( // config, // output_directory, // output_file, // "stylesheet/reset.css", // )?, get_web_path(config, output_directory, output_file, "stylesheet/main.css")?, ]; let js_files = vec![get_web_path( config, output_directory, output_file, "blog_post.js", )?]; let global_settings = GlobalSettings::new( config.get_site_title().map(str::to_string), css_files, js_files, ); let page_header = PageHeader::new( config.get_site_title().map(str::to_string), Some(get_web_path(config, output_directory, output_file, "")?), ); let children = original .into_iter() .map(|blog_post| { RenderBlogStreamEntry::new(config, output_directory, output_file, blog_post) }) .collect::, _>>()?; Ok(RenderBlogStream { global_settings, page_header: Some(page_header), children, older_link, newer_link, }) } } #[derive(Debug, Serialize)] pub(crate) struct RenderBlogStreamEntry { /// The title that will be shown visibly on the page. title: Option, self_link: Option, children: Vec, footnotes: Vec, } impl RenderBlogStreamEntry { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, original: &BlogPost, ) -> Result { todo!() } }