diff --git a/src/blog_post/convert.rs b/src/blog_post/convert.rs index 293b491..cd321cd 100644 --- a/src/blog_post/convert.rs +++ b/src/blog_post/convert.rs @@ -5,10 +5,14 @@ use std::path::PathBuf; use crate::config::Config; use crate::context::GlobalSettings; use crate::context::RenderBlogPostPage; +use crate::context::RenderDocumentElement; +use crate::context::RenderHeading; +use crate::context::RenderSection; use crate::error::CustomError; use super::BlogPost; use super::BlogPostPage; +use super::DocumentElement; pub(crate) fn convert_blog_post_page_to_render_context, F: AsRef>( config: &Config, @@ -39,11 +43,38 @@ pub(crate) fn convert_blog_post_page_to_render_context, F: AsRef< output_file.strip_prefix(output_directory)?, )?; + let children = { + let mut children = Vec::new(); + + for child in page.children.iter() { + match child { + DocumentElement::Heading(heading) => { + children.push(RenderDocumentElement::Heading(RenderHeading::new( + config, + output_directory, + output_file, + heading, + )?)); + } + DocumentElement::Section(section) => { + children.push(RenderDocumentElement::Section(RenderSection::new( + config, + output_directory, + output_file, + section, + )?)); + } + } + } + + children + }; + let ret = RenderBlogPostPage::new( global_settings, page.title.clone(), Some(link_to_blog_post), - Vec::new(), + children, ); Ok(ret) } diff --git a/src/blog_post/heading.rs b/src/blog_post/heading.rs index f27bcc8..57a5da8 100644 --- a/src/blog_post/heading.rs +++ b/src/blog_post/heading.rs @@ -4,8 +4,8 @@ use super::Object; #[derive(Debug)] pub(crate) struct Heading { - title: Vec, - level: organic::types::HeadlineLevel, + pub(crate) level: organic::types::HeadlineLevel, + pub(crate) title: Vec, } impl Heading { diff --git a/src/context/heading.rs b/src/context/heading.rs index 2a30e7a..1192e78 100644 --- a/src/context/heading.rs +++ b/src/context/heading.rs @@ -1,10 +1,36 @@ +use std::path::Path; + use serde::Serialize; +use crate::blog_post::Heading; +use crate::config::Config; +use crate::error::CustomError; + use super::RenderObject; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "heading")] pub(crate) struct RenderHeading { + level: organic::types::HeadlineLevel, title: Vec, } + +impl RenderHeading { + pub(crate) fn new, F: AsRef>( + config: &Config, + output_directory: D, + output_file: F, + heading: &Heading, + ) -> Result { + let title = heading + .title + .iter() + .map(|obj| RenderObject::new(config, &output_directory, &output_file, obj)) + .collect::, _>>()?; + Ok(RenderHeading { + level: heading.level, + title, + }) + } +} diff --git a/src/context/object.rs b/src/context/object.rs index 13e8ee4..724c5d1 100644 --- a/src/context/object.rs +++ b/src/context/object.rs @@ -1,5 +1,22 @@ +use std::path::Path; + use serde::Serialize; +use crate::blog_post::Object; +use crate::config::Config; +use crate::error::CustomError; + #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderObject {} + +impl RenderObject { + pub(crate) fn new, F: AsRef>( + config: &Config, + output_directory: D, + output_file: F, + section: &Object, + ) -> Result { + todo!() + } +}