Compare commits

...

3 Commits

Author SHA1 Message Date
Tom Alexander
2b7a19a1d4
Introduce the corresponding non-render types. 2023-10-24 00:36:08 -04:00
Tom Alexander
3b472a9e96
Introduce element and object enums. 2023-10-24 00:04:44 -04:00
Tom Alexander
77f8375d7a
Introduce an array of document elements. 2023-10-24 00:01:40 -04:00
19 changed files with 143 additions and 9 deletions

View File

@ -4,8 +4,8 @@ use std::path::PathBuf;
use crate::config::Config; use crate::config::Config;
use crate::error::CustomError; use crate::error::CustomError;
use crate::types::GlobalSettings; use crate::context::GlobalSettings;
use crate::types::RenderBlogPostPage; use crate::context::RenderBlogPostPage;
use super::BlogPost; use super::BlogPost;
use super::BlogPostPage; use super::BlogPostPage;
@ -39,7 +39,12 @@ pub(crate) fn convert_blog_post_page_to_render_context<D: AsRef<Path>, F: AsRef<
output_file.strip_prefix(output_directory)?, output_file.strip_prefix(output_directory)?,
)?; )?;
let ret = RenderBlogPostPage::new(global_settings, page.title.clone(), Some(link_to_blog_post)); let ret = RenderBlogPostPage::new(
global_settings,
page.title.clone(),
Some(link_to_blog_post),
Vec::new(),
);
Ok(ret) Ok(ret)
} }

View File

@ -7,11 +7,13 @@ use walkdir::WalkDir;
use crate::error::CustomError; use crate::error::CustomError;
use super::BlogPostPage; use super::BlogPostPage;
use super::DocumentElement;
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct BlogPost { pub(crate) struct BlogPost {
pub(crate) id: String, pub(crate) id: String,
pub(crate) pages: Vec<BlogPostPage>, pub(crate) pages: Vec<BlogPostPage>,
pub(crate) children: Vec<DocumentElement>,
} }
impl BlogPost { impl BlogPost {
@ -57,6 +59,7 @@ impl BlogPost {
Ok(BlogPost { Ok(BlogPost {
id: post_id.to_string_lossy().into_owned(), id: post_id.to_string_lossy().into_owned(),
pages, pages,
children: Vec::new(),
}) })
} }
inner(root_dir.as_ref(), post_dir.as_ref()).await inner(root_dir.as_ref(), post_dir.as_ref()).await

View File

@ -0,0 +1,8 @@
use super::Heading;
use super::Section;
#[derive(Debug)]
pub(crate) enum DocumentElement {
Heading(Heading),
Section(Section),
}

2
src/blog_post/element.rs Normal file
View File

@ -0,0 +1,2 @@
#[derive(Debug)]
pub(crate) enum Element {}

10
src/blog_post/heading.rs Normal file
View File

@ -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<Heading, CustomError> {
todo!()
}
}

View File

@ -1,6 +1,16 @@
mod convert; mod convert;
mod definition; mod definition;
mod document_element;
mod element;
mod heading;
mod object;
mod page; mod page;
mod section;
pub(crate) use convert::convert_blog_post_page_to_render_context; pub(crate) use convert::convert_blog_post_page_to_render_context;
pub(crate) use definition::BlogPost; 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 page::BlogPostPage;
pub(crate) use section::Section;

2
src/blog_post/object.rs Normal file
View File

@ -0,0 +1,2 @@
#[derive(Debug)]
pub(crate) enum Object {}

View File

@ -2,12 +2,18 @@ use std::path::PathBuf;
use crate::error::CustomError; use crate::error::CustomError;
use super::DocumentElement;
use super::Heading;
use super::Section;
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct BlogPostPage { pub(crate) struct BlogPostPage {
/// Relative path from the root of the blog post. /// Relative path from the root of the blog post.
pub(crate) path: PathBuf, pub(crate) path: PathBuf,
pub(crate) title: Option<String>, pub(crate) title: Option<String>,
pub(crate) children: Vec<DocumentElement>,
} }
impl BlogPostPage { impl BlogPostPage {
@ -16,9 +22,18 @@ impl BlogPostPage {
document: organic::types::Document<'_>, document: organic::types::Document<'_>,
) -> Result<BlogPostPage, CustomError> { ) -> Result<BlogPostPage, CustomError> {
let path = path.into(); 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 { Ok(BlogPostPage {
path, path,
title: get_title(&document), title: get_title(&document),
children,
}) })
} }

10
src/blog_post/section.rs Normal file
View File

@ -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<Section, CustomError> {
todo!()
}
}

View File

@ -1,6 +1,7 @@
use serde::Serialize; use serde::Serialize;
use super::GlobalSettings; use super::GlobalSettings;
use super::RenderDocumentElement;
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
#[serde(tag = "type")] #[serde(tag = "type")]
@ -12,6 +13,8 @@ pub(crate) struct RenderBlogPostPage {
title: Option<String>, title: Option<String>,
self_link: Option<String>, self_link: Option<String>,
children: Vec<RenderDocumentElement>,
} }
impl RenderBlogPostPage { impl RenderBlogPostPage {
@ -19,11 +22,13 @@ impl RenderBlogPostPage {
global_settings: GlobalSettings, global_settings: GlobalSettings,
title: Option<String>, title: Option<String>,
self_link: Option<String>, self_link: Option<String>,
children: Vec<RenderDocumentElement>,
) -> RenderBlogPostPage { ) -> RenderBlogPostPage {
RenderBlogPostPage { RenderBlogPostPage {
global_settings, global_settings,
title, title,
self_link, self_link,
children,
} }
} }
} }

View File

@ -0,0 +1,11 @@
use serde::Serialize;
use super::RenderHeading;
use super::RenderSection;
#[derive(Debug, Serialize)]
#[serde(untagged)]
pub(crate) enum RenderDocumentElement {
Heading(RenderHeading),
Section(RenderSection),
}

5
src/context/element.rs Normal file
View File

@ -0,0 +1,5 @@
use serde::Serialize;
#[derive(Debug, Serialize)]
#[serde(untagged)]
pub(crate) enum RenderElement {}

10
src/context/heading.rs Normal file
View File

@ -0,0 +1,10 @@
use serde::Serialize;
use super::RenderObject;
#[derive(Debug, Serialize)]
#[serde(tag = "type")]
#[serde(rename = "heading")]
pub(crate) struct RenderHeading {
title: Vec<RenderObject>,
}

15
src/context/mod.rs Normal file
View File

@ -0,0 +1,15 @@
mod blog_post_page;
mod document_element;
mod element;
mod global_settings;
mod heading;
mod object;
mod section;
pub(crate) use blog_post_page::RenderBlogPostPage;
pub(crate) use document_element::RenderDocumentElement;
pub(crate) use element::RenderElement;
pub(crate) use global_settings::GlobalSettings;
pub(crate) use heading::RenderHeading;
pub(crate) use object::RenderObject;
pub(crate) use section::RenderSection;

5
src/context/object.rs Normal file
View File

@ -0,0 +1,5 @@
use serde::Serialize;
#[derive(Debug, Serialize)]
#[serde(untagged)]
pub(crate) enum RenderObject {}

23
src/context/section.rs Normal file
View File

@ -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<D: AsRef<Path>, F: AsRef<Path>>(
config: &Config,
output_directory: D,
output_file: F,
section: &Section,
) -> Result<RenderSection, CustomError> {
todo!()
}
}

View File

@ -13,7 +13,7 @@ mod command;
mod config; mod config;
mod error; mod error;
mod render; mod render;
mod types; mod context;
fn main() -> Result<ExitCode, CustomError> { fn main() -> Result<ExitCode, CustomError> {
let rt = tokio::runtime::Runtime::new()?; let rt = tokio::runtime::Runtime::new()?;

View File

@ -1,5 +0,0 @@
mod blog_post_page;
mod global_settings;
pub(crate) use blog_post_page::RenderBlogPostPage;
pub(crate) use global_settings::GlobalSettings;