Compare commits

..

No commits in common. "2b6f86d4e9c19e1b7788ea8900c930828cd0055d" and "e543a5db741902bc31fab32fa3be75f0860cfdd6" have entirely different histories.

8 changed files with 21 additions and 59 deletions

2
Cargo.lock generated
View File

@ -336,6 +336,8 @@ dependencies = [
[[package]]
name = "organic"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3f0f8a2a6d31c3cac7ebf543d8cb2e8f648300462fc2f6b1a09cac10daf0387"
dependencies = [
"nom 7.1.3",
"walkdir",

View File

@ -9,9 +9,7 @@ edition = "2021"
clap = { version = "4.4.6", default-features = false, features = ["std", "color", "help", "derive"] }
duster = { git = "https://code.fizz.buzz/talexander/duster.git", branch = "master" }
include_dir = "0.7.3"
# TODO: This is temporary to work on the latest organic code. Eventually switch back to using the published crate.
organic = { path = "../organic" }
# organic = "0.1.12"
organic = "0.1.12"
serde = { version = "1.0.189", default-features = false, features = ["std", "derive"] }
serde_json = "1.0.107"
tokio = { version = "1.30.0", default-features = false, features = ["rt", "rt-multi-thread", "fs", "io-util"] }

View File

@ -1,10 +1,6 @@
use super::render_context::RenderBlogPostPage;
use super::render_context::RenderBlogPost;
use super::BlogPost;
use super::BlogPostPage;
pub(crate) fn convert_blog_post_page_to_render_context(
_post: &BlogPost,
page: &BlogPostPage,
) -> RenderBlogPostPage {
RenderBlogPostPage::new(page.title.clone())
pub(crate) fn convert_blog_post_to_render_context(post: &BlogPost) -> RenderBlogPost {
RenderBlogPost::new(post.id.clone())
}

View File

@ -11,7 +11,7 @@ use super::BlogPostPage;
#[derive(Debug)]
pub(crate) struct BlogPost {
pub(crate) id: String,
pub(crate) pages: Vec<BlogPostPage>,
pages: Vec<BlogPostPage>,
}
impl BlogPost {

View File

@ -2,6 +2,6 @@ mod convert;
mod definition;
mod page;
mod render_context;
pub(crate) use convert::convert_blog_post_page_to_render_context;
pub(crate) use convert::convert_blog_post_to_render_context;
pub(crate) use definition::BlogPost;
pub(crate) use page::BlogPostPage;

View File

@ -5,9 +5,9 @@ use crate::error::CustomError;
#[derive(Debug)]
pub(crate) struct BlogPostPage {
/// Relative path from the root of the blog post.
pub(crate) path: PathBuf,
path: PathBuf,
pub(crate) title: Option<String>,
title: String,
}
impl BlogPostPage {
@ -18,27 +18,7 @@ impl BlogPostPage {
let path = path.into();
Ok(BlogPostPage {
path,
title: get_title(&document),
title: "".to_owned(),
})
}
/// Get the output path relative to the post directory.
pub(crate) fn get_output_path(&self) -> PathBuf {
let mut ret = self.path.clone();
ret.set_extension("html");
ret
}
}
fn get_title(document: &organic::types::Document<'_>) -> Option<String> {
organic::types::AstNode::from(document)
.iter_all_ast_nodes()
.filter_map(|node| match node {
organic::types::AstNode::Keyword(kw) if kw.key.eq_ignore_ascii_case("title") => {
Some(kw)
}
_ => None,
})
.last()
.map(|kw| kw.value.to_owned())
}

View File

@ -2,13 +2,13 @@ use serde::Serialize;
#[derive(Debug, Serialize)]
#[serde(tag = "type")]
#[serde(rename = "blog_post_page")]
pub(crate) struct RenderBlogPostPage {
title: Option<String>,
#[serde(rename = "blog_post")]
pub(crate) struct RenderBlogPost {
id: String,
}
impl RenderBlogPostPage {
pub(crate) fn new(title: Option<String>) -> RenderBlogPostPage {
RenderBlogPostPage { title }
impl RenderBlogPost {
pub(crate) fn new(id: String) -> RenderBlogPost {
RenderBlogPost { id }
}
}

View File

@ -4,7 +4,7 @@ use std::path::PathBuf;
use include_dir::include_dir;
use include_dir::Dir;
use crate::blog_post::convert_blog_post_page_to_render_context;
use crate::blog_post::convert_blog_post_to_render_context;
use crate::blog_post::BlogPost;
use crate::error::CustomError;
use crate::render::DusterRenderer;
@ -56,23 +56,9 @@ impl SiteRenderer {
}
for blog_post in &self.blog_posts {
for blog_post_page in &blog_post.pages {
let output_path = self
.output_directory
.join("posts")
.join(&blog_post.id)
.join(blog_post_page.get_output_path());
println!("Output path: {:?}", output_path);
let render_context =
convert_blog_post_page_to_render_context(blog_post, blog_post_page);
let rendered_output = renderer_integration.render(render_context)?;
println!("Rendered: {}", rendered_output);
let parent_directory = output_path
.parent()
.ok_or("Output file should have a containing directory.")?;
tokio::fs::create_dir_all(parent_directory).await?;
tokio::fs::write(output_path, rendered_output).await?;
}
let render_context = convert_blog_post_to_render_context(blog_post);
let rendered_output = renderer_integration.render(render_context)?;
println!("Rendered: {}", rendered_output);
}
Ok(())