diff --git a/src/blog_post/convert.rs b/src/blog_post/convert.rs index f94db3e..0c2fb80 100644 --- a/src/blog_post/convert.rs +++ b/src/blog_post/convert.rs @@ -4,8 +4,8 @@ use std::path::PathBuf; use crate::config::Config; use crate::error::CustomError; -use crate::types::GlobalSettings; -use crate::types::RenderBlogPostPage; +use crate::context::GlobalSettings; +use crate::context::RenderBlogPostPage; use super::BlogPost; use super::BlogPostPage; diff --git a/src/blog_post/definition.rs b/src/blog_post/definition.rs index 96a3c7a..019c422 100644 --- a/src/blog_post/definition.rs +++ b/src/blog_post/definition.rs @@ -7,11 +7,13 @@ use walkdir::WalkDir; use crate::error::CustomError; use super::BlogPostPage; +use super::DocumentElement; #[derive(Debug)] pub(crate) struct BlogPost { pub(crate) id: String, pub(crate) pages: Vec, + pub(crate) children: Vec, } impl BlogPost { @@ -57,6 +59,7 @@ impl BlogPost { Ok(BlogPost { id: post_id.to_string_lossy().into_owned(), pages, + children: Vec::new(), }) } inner(root_dir.as_ref(), post_dir.as_ref()).await diff --git a/src/blog_post/document_element.rs b/src/blog_post/document_element.rs new file mode 100644 index 0000000..ab0f28a --- /dev/null +++ b/src/blog_post/document_element.rs @@ -0,0 +1,8 @@ +use super::Heading; +use super::Section; + +#[derive(Debug)] +pub(crate) enum DocumentElement { + Heading(Heading), + Section(Section), +} diff --git a/src/blog_post/element.rs b/src/blog_post/element.rs new file mode 100644 index 0000000..bb64b91 --- /dev/null +++ b/src/blog_post/element.rs @@ -0,0 +1,2 @@ +#[derive(Debug)] +pub(crate) enum Element {} diff --git a/src/blog_post/heading.rs b/src/blog_post/heading.rs new file mode 100644 index 0000000..95a0cee --- /dev/null +++ b/src/blog_post/heading.rs @@ -0,0 +1,10 @@ +use crate::error::CustomError; + +#[derive(Debug)] +pub(crate) struct Heading {} + +impl Heading { + pub(crate) fn new(heading: &organic::types::Heading<'_>) -> Result { + todo!() + } +} diff --git a/src/blog_post/mod.rs b/src/blog_post/mod.rs index 2996114..fde7fc4 100644 --- a/src/blog_post/mod.rs +++ b/src/blog_post/mod.rs @@ -1,6 +1,16 @@ mod convert; mod definition; +mod document_element; +mod element; +mod heading; +mod object; mod page; +mod section; pub(crate) use convert::convert_blog_post_page_to_render_context; pub(crate) use definition::BlogPost; +pub(crate) use document_element::DocumentElement; +pub(crate) use element::Element; +pub(crate) use heading::Heading; +pub(crate) use object::Object; pub(crate) use page::BlogPostPage; +pub(crate) use section::Section; diff --git a/src/blog_post/object.rs b/src/blog_post/object.rs new file mode 100644 index 0000000..d28ee34 --- /dev/null +++ b/src/blog_post/object.rs @@ -0,0 +1,2 @@ +#[derive(Debug)] +pub(crate) enum Object {} diff --git a/src/blog_post/page.rs b/src/blog_post/page.rs index 8c56412..7a7aab1 100644 --- a/src/blog_post/page.rs +++ b/src/blog_post/page.rs @@ -2,12 +2,18 @@ use std::path::PathBuf; use crate::error::CustomError; +use super::DocumentElement; +use super::Heading; +use super::Section; + #[derive(Debug)] pub(crate) struct BlogPostPage { /// Relative path from the root of the blog post. pub(crate) path: PathBuf, pub(crate) title: Option, + + pub(crate) children: Vec, } impl BlogPostPage { @@ -16,9 +22,18 @@ impl BlogPostPage { document: organic::types::Document<'_>, ) -> Result { let path = path.into(); + let mut children = Vec::new(); + if let Some(section) = document.zeroth_section.as_ref() { + children.push(DocumentElement::Section(Section::new(section)?)); + } + for heading in document.children.iter() { + children.push(DocumentElement::Heading(Heading::new(heading)?)); + } + Ok(BlogPostPage { path, title: get_title(&document), + children, }) } diff --git a/src/blog_post/section.rs b/src/blog_post/section.rs new file mode 100644 index 0000000..098dd6c --- /dev/null +++ b/src/blog_post/section.rs @@ -0,0 +1,10 @@ +use crate::error::CustomError; + +#[derive(Debug)] +pub(crate) struct Section {} + +impl Section { + pub(crate) fn new(section: &organic::types::Section<'_>) -> Result { + todo!() + } +} diff --git a/src/types/blog_post_page.rs b/src/context/blog_post_page.rs similarity index 100% rename from src/types/blog_post_page.rs rename to src/context/blog_post_page.rs diff --git a/src/types/document_element.rs b/src/context/document_element.rs similarity index 100% rename from src/types/document_element.rs rename to src/context/document_element.rs diff --git a/src/types/element.rs b/src/context/element.rs similarity index 100% rename from src/types/element.rs rename to src/context/element.rs diff --git a/src/types/global_settings.rs b/src/context/global_settings.rs similarity index 100% rename from src/types/global_settings.rs rename to src/context/global_settings.rs diff --git a/src/types/heading.rs b/src/context/heading.rs similarity index 52% rename from src/types/heading.rs rename to src/context/heading.rs index cda697a..2a30e7a 100644 --- a/src/types/heading.rs +++ b/src/context/heading.rs @@ -1,6 +1,10 @@ use serde::Serialize; +use super::RenderObject; + #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "heading")] -pub(crate) struct RenderHeading {} +pub(crate) struct RenderHeading { + title: Vec, +} diff --git a/src/types/mod.rs b/src/context/mod.rs similarity index 100% rename from src/types/mod.rs rename to src/context/mod.rs diff --git a/src/types/object.rs b/src/context/object.rs similarity index 100% rename from src/types/object.rs rename to src/context/object.rs diff --git a/src/context/section.rs b/src/context/section.rs new file mode 100644 index 0000000..12d0a71 --- /dev/null +++ b/src/context/section.rs @@ -0,0 +1,23 @@ +use std::path::Path; + +use serde::Serialize; + +use crate::blog_post::Section; +use crate::config::Config; +use crate::error::CustomError; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +#[serde(rename = "section")] +pub(crate) struct RenderSection {} + +impl RenderSection { + pub(crate) fn new, F: AsRef>( + config: &Config, + output_directory: D, + output_file: F, + section: &Section, + ) -> Result { + todo!() + } +} diff --git a/src/main.rs b/src/main.rs index 7505bd4..e280cc7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ mod command; mod config; mod error; mod render; -mod types; +mod context; fn main() -> Result { let rt = tokio::runtime::Runtime::new()?; diff --git a/src/types/section.rs b/src/types/section.rs deleted file mode 100644 index d59c81d..0000000 --- a/src/types/section.rs +++ /dev/null @@ -1,6 +0,0 @@ -use serde::Serialize; - -#[derive(Debug, Serialize)] -#[serde(tag = "type")] -#[serde(rename = "section")] -pub(crate) struct RenderSection {}