diff --git a/src/blog_post/convert.rs b/src/blog_post/convert.rs new file mode 100644 index 0000000..128dd04 --- /dev/null +++ b/src/blog_post/convert.rs @@ -0,0 +1,8 @@ +use super::render_context::RenderBlogPost; +use super::BlogPost; + +pub(crate) fn convert_blog_post_to_render_context(post: &BlogPost) -> RenderBlogPost { + RenderBlogPost { + id: post.id.clone(), + } +} diff --git a/src/blog_post/definition.rs b/src/blog_post/definition.rs index 5179858..087beef 100644 --- a/src/blog_post/definition.rs +++ b/src/blog_post/definition.rs @@ -8,7 +8,7 @@ use crate::error::CustomError; #[derive(Debug)] pub(crate) struct BlogPost { - id: String, + pub(crate) id: String, } impl BlogPost { diff --git a/src/blog_post/mod.rs b/src/blog_post/mod.rs index 687edec..0962dda 100644 --- a/src/blog_post/mod.rs +++ b/src/blog_post/mod.rs @@ -1,3 +1,5 @@ +mod convert; mod definition; mod render_context; +pub(crate) use convert::convert_blog_post_to_render_context; pub(crate) use definition::BlogPost; diff --git a/src/blog_post/render_context.rs b/src/blog_post/render_context.rs index e2562d0..27fe4e4 100644 --- a/src/blog_post/render_context.rs +++ b/src/blog_post/render_context.rs @@ -4,5 +4,5 @@ use serde::Serialize; #[serde(tag = "type")] #[serde(rename = "blog_post")] pub(crate) struct RenderBlogPost { - id: String, + pub(crate) id: String, } diff --git a/src/command/build/runner.rs b/src/command/build/runner.rs index ecb97b8..f665bc5 100644 --- a/src/command/build/runner.rs +++ b/src/command/build/runner.rs @@ -1,5 +1,6 @@ use std::path::PathBuf; +use crate::blog_post::convert_blog_post_to_render_context; use crate::blog_post::BlogPost; use crate::cli::parameters::BuildArgs; use crate::config::Config; @@ -7,17 +8,14 @@ use crate::error::CustomError; pub(crate) async fn build_site(args: BuildArgs) -> Result<(), CustomError> { let config = Config::load_from_file(args.config).await?; - let root_directory = config.get_root_directory().to_owned(); - let output_directory = get_output_directory(&config).await?; - let post_directories = get_post_directories(&config).await?; - let load_jobs = post_directories - .into_iter() - .map(|path| tokio::spawn(BlogPost::load_blog_post(root_directory.clone(), path))); - let mut blog_posts = Vec::new(); - for job in load_jobs { - blog_posts.push(job.await??); - } + let blog_posts = load_blog_posts(&config).await?; println!("{:?}", blog_posts); + + for blog_post in &blog_posts { + let render_context = convert_blog_post_to_render_context(blog_post); + println!("{}", serde_json::to_string(&render_context)?); + } + Ok(()) } @@ -51,3 +49,16 @@ async fn get_post_directories(config: &Config) -> Result, CustomErr } Ok(ret) } + +async fn load_blog_posts(config: &Config) -> Result, CustomError> { + let root_directory = config.get_root_directory().to_owned(); + let post_directories = get_post_directories(&config).await?; + let load_jobs = post_directories + .into_iter() + .map(|path| tokio::spawn(BlogPost::load_blog_post(root_directory.clone(), path))); + let mut blog_posts = Vec::new(); + for job in load_jobs { + blog_posts.push(job.await??); + } + Ok(blog_posts) +} diff --git a/src/error/error.rs b/src/error/error.rs index 130f283..78f109f 100644 --- a/src/error/error.rs +++ b/src/error/error.rs @@ -6,6 +6,7 @@ pub(crate) enum CustomError { TomlDeserialize(toml::de::Error), WalkDir(walkdir::Error), Tokio(tokio::task::JoinError), + Serde(serde_json::Error), } impl From for CustomError { @@ -43,3 +44,9 @@ impl From for CustomError { CustomError::Tokio(value) } } + +impl From for CustomError { + fn from(value: serde_json::Error) -> Self { + CustomError::Serde(value) + } +}