use std::fs;
use std::path::Path;
use rayon::prelude::*;
use crate::error::PageError;
use crate::models::RenderedPage;
pub fn write_all(pages: &[RenderedPage]) -> Result<(), PageError> {
pages.par_iter().try_for_each(write_one)
}
fn write_one(page: &RenderedPage) -> Result<(), PageError> {
if let Some(parent) = page.output_path.parent() {
fs::create_dir_all(parent).map_err(|err| {
PageError::new(
&page.output_path,
format!("failed to create directory: {err}"),
)
})?;
}
fs::write(&page.output_path, page.html.as_bytes()).map_err(|err| {
PageError::new(
&page.output_path,
format!("failed to write HTML output: {err}"),
)
})
}
pub fn prepare_output_dir(path: &Path) -> Result<(), PageError> {
fs::create_dir_all(path)
.map_err(|err| PageError::new(path, format!("failed to create output directory: {err}")))
}
pub fn clean_output_dir(path: &Path) -> Result<(), PageError> {
if path.exists() {
fs::remove_dir_all(path).map_err(|err| {
PageError::new(path, format!("failed to clean output directory: {err}"))
})?;
}
prepare_output_dir(path)
}