Move the logic into convert_blog_post_page_to_render_context.
I was writing it in the build command's rust files for convenience, but now its getting long enough to warrant moving it into its final location.
This commit is contained in:
parent
178ce877bc
commit
3ac7826d2c
@ -1,12 +1,75 @@
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::error::CustomError;
|
||||
|
||||
use super::render_context::GlobalSettings;
|
||||
use super::render_context::RenderBlogPostPage;
|
||||
use super::BlogPost;
|
||||
use super::BlogPostPage;
|
||||
|
||||
pub(crate) fn convert_blog_post_page_to_render_context(
|
||||
pub(crate) fn convert_blog_post_page_to_render_context<D: AsRef<Path>, F: AsRef<Path>>(
|
||||
config: &Config,
|
||||
output_directory: D,
|
||||
output_file: F,
|
||||
_post: &BlogPost,
|
||||
page: &BlogPostPage,
|
||||
global_settings: GlobalSettings,
|
||||
) -> RenderBlogPostPage {
|
||||
RenderBlogPostPage::new(global_settings, page.title.clone())
|
||||
) -> Result<RenderBlogPostPage, CustomError> {
|
||||
let output_directory = output_directory.as_ref();
|
||||
let output_file = output_file.as_ref();
|
||||
let css_files = vec![get_web_path(
|
||||
config,
|
||||
output_directory,
|
||||
output_file,
|
||||
"main.css",
|
||||
)?];
|
||||
let js_files = vec![get_web_path(
|
||||
config,
|
||||
output_directory,
|
||||
output_file,
|
||||
"blog_post.js",
|
||||
)?];
|
||||
let global_settings = GlobalSettings::new(page.title.clone(), css_files, js_files);
|
||||
|
||||
let ret = RenderBlogPostPage::new(global_settings, page.title.clone());
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
fn get_web_path<D: AsRef<Path>, F: AsRef<Path>, P: AsRef<Path>>(
|
||||
config: &Config,
|
||||
output_directory: D,
|
||||
containing_file: F,
|
||||
path_from_web_root: P,
|
||||
) -> Result<String, CustomError> {
|
||||
let path_from_web_root = path_from_web_root.as_ref();
|
||||
if config.use_relative_paths() {
|
||||
let output_directory = output_directory.as_ref();
|
||||
let containing_file = containing_file.as_ref();
|
||||
// Subtracting 1 from the depth to "remove" the file name.
|
||||
let depth_from_web_root = containing_file
|
||||
.strip_prefix(output_directory)?
|
||||
.components()
|
||||
.count()
|
||||
- 1;
|
||||
let prefix = "../".repeat(depth_from_web_root);
|
||||
let final_path = PathBuf::from(prefix).join(path_from_web_root);
|
||||
let final_string = final_path
|
||||
.as_path()
|
||||
.to_str()
|
||||
.map(str::to_string)
|
||||
.ok_or("Path should be valid utf-8.")?;
|
||||
Ok(final_string)
|
||||
} else {
|
||||
let web_root = config
|
||||
.get_web_root()
|
||||
.ok_or("Must either use_relative_paths or set the web_root in the config.")?;
|
||||
let final_path = PathBuf::from(web_root).join(path_from_web_root);
|
||||
let final_string = final_path
|
||||
.as_path()
|
||||
.to_str()
|
||||
.map(str::to_string)
|
||||
.ok_or("Path should be valid utf-8.")?;
|
||||
Ok(final_string)
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ impl BlogPost {
|
||||
root_dir: R,
|
||||
post_dir: P,
|
||||
) -> Result<BlogPost, CustomError> {
|
||||
async fn inner(root_dir: &Path, post_dir: &Path) -> Result<BlogPost, CustomError> {
|
||||
async fn inner(_root_dir: &Path, post_dir: &Path) -> Result<BlogPost, CustomError> {
|
||||
let post_id = post_dir
|
||||
.file_name()
|
||||
.expect("The post directory should have a name.");
|
||||
|
@ -5,4 +5,3 @@ mod render_context;
|
||||
pub(crate) use convert::convert_blog_post_page_to_render_context;
|
||||
pub(crate) use definition::BlogPost;
|
||||
pub(crate) use page::BlogPostPage;
|
||||
pub(crate) use render_context::GlobalSettings;
|
||||
|
@ -1,5 +1,4 @@
|
||||
use std::ffi::OsStr;
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use include_dir::include_dir;
|
||||
@ -7,7 +6,6 @@ use include_dir::Dir;
|
||||
|
||||
use crate::blog_post::convert_blog_post_page_to_render_context;
|
||||
use crate::blog_post::BlogPost;
|
||||
use crate::blog_post::GlobalSettings;
|
||||
use crate::config::Config;
|
||||
use crate::error::CustomError;
|
||||
use crate::render::DusterRenderer;
|
||||
@ -65,25 +63,14 @@ impl SiteRenderer {
|
||||
.join("posts")
|
||||
.join(&blog_post.id)
|
||||
.join(blog_post_page.get_output_path());
|
||||
let css_files = vec![get_web_path(
|
||||
config,
|
||||
&self.output_directory,
|
||||
&output_path,
|
||||
"main.css",
|
||||
)?];
|
||||
let js_files = vec![get_web_path(
|
||||
config,
|
||||
&self.output_directory,
|
||||
&output_path,
|
||||
"blog_post.js",
|
||||
)?];
|
||||
let global_settings =
|
||||
GlobalSettings::new(blog_post_page.title.clone(), css_files, js_files);
|
||||
|
||||
let render_context = convert_blog_post_page_to_render_context(
|
||||
config,
|
||||
&self.output_directory,
|
||||
&output_path,
|
||||
blog_post,
|
||||
blog_post_page,
|
||||
global_settings,
|
||||
);
|
||||
)?;
|
||||
let rendered_output = renderer_integration.render(render_context)?;
|
||||
println!("Rendered: {}", rendered_output);
|
||||
let parent_directory = output_path
|
||||
@ -110,41 +97,3 @@ fn build_name_contents_pairs<'a>(
|
||||
let contents = std::str::from_utf8(entry.contents())?;
|
||||
Ok((name, contents))
|
||||
}
|
||||
|
||||
fn get_web_path<D: AsRef<Path>, F: AsRef<Path>, P: AsRef<Path>>(
|
||||
config: &Config,
|
||||
output_directory: D,
|
||||
containing_file: F,
|
||||
path_from_web_root: P,
|
||||
) -> Result<String, CustomError> {
|
||||
let path_from_web_root = path_from_web_root.as_ref();
|
||||
if config.use_relative_paths() {
|
||||
let output_directory = output_directory.as_ref();
|
||||
let containing_file = containing_file.as_ref();
|
||||
// Subtracting 1 from the depth to "remove" the file name.
|
||||
let depth_from_web_root = containing_file
|
||||
.strip_prefix(output_directory)?
|
||||
.components()
|
||||
.count()
|
||||
- 1;
|
||||
let prefix = "../".repeat(depth_from_web_root);
|
||||
let final_path = PathBuf::from(prefix).join(path_from_web_root);
|
||||
let final_string = final_path
|
||||
.as_path()
|
||||
.to_str()
|
||||
.map(str::to_string)
|
||||
.ok_or("Path should be valid utf-8.")?;
|
||||
Ok(final_string)
|
||||
} else {
|
||||
let web_root = config
|
||||
.get_web_root()
|
||||
.ok_or("Must either use_relative_paths or set the web_root in the config.")?;
|
||||
let final_path = PathBuf::from(web_root).join(path_from_web_root);
|
||||
let final_string = final_path
|
||||
.as_path()
|
||||
.to_str()
|
||||
.map(str::to_string)
|
||||
.ok_or("Path should be valid utf-8.")?;
|
||||
Ok(final_string)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user