copy static files

This commit is contained in:
KitsuneCafe 2024-02-04 14:42:28 -05:00
parent 5d89a8aebe
commit 1be561f6bd

View file

@ -14,6 +14,7 @@ use roxy_tera_parser::{TeraParser, TeraParserOptions};
use clap::Parser as Clap; use clap::Parser as Clap;
use std::{ use std::{
ffi,
fs::{self, File}, fs::{self, File},
io::{BufReader, Read}, io::{BufReader, Read},
path::{Path, PathBuf}, path::{Path, PathBuf},
@ -23,8 +24,6 @@ use toml::Table;
use glob::glob; use glob::glob;
use roxy_core::roxy::{Parser, Roxy}; use roxy_core::roxy::{Parser, Roxy};
const DEFAULT_THEME: &'static str = "base16-ocean.dark";
fn handle_err<E: std::error::Error + 'static>(err: E) -> Error { fn handle_err<E: std::error::Error + 'static>(err: E) -> Error {
Error::new(err.to_string(), err) Error::new(err.to_string(), err)
} }
@ -88,6 +87,19 @@ fn context_from_meta_files<'a, T: AsRef<Path>>(
Ok(context) Ok(context)
} }
fn copy_static<T: AsRef<Path>>(files: &Vec<&PathBuf>, file_path: &FilePath<T>) -> Result<(), Error> {
for file in files {
let output = file_path.to_output(file)?;
fs::create_dir_all(output.parent().unwrap())?;
fs::copy(file, file_path.to_output(file)?)?;
}
Ok(())
}
const DEFAULT_THEME: &'static str = "base16-ocean.dark";
const CONTENT_EXT: [&'static str; 4] = ["md", "tera", "html", "htm"];
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
let opts = Options::parse(); let opts = Options::parse();
@ -100,10 +112,18 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let (meta, files): (Vec<&PathBuf>, Vec<&PathBuf>) = let (meta, files): (Vec<&PathBuf>, Vec<&PathBuf>) =
files.iter().partition(|f| f.extension().unwrap() == "toml"); files.iter().partition(|f| f.extension().unwrap() == "toml");
let (content, files): (Vec<&PathBuf>, Vec<&PathBuf>) = files
.iter()
.partition(|f| {
let ext = f.extension().and_then(ffi::OsStr::to_str).unwrap();
CONTENT_EXT.contains(&ext)
});
let mut context = context_from_meta_files(&meta, &file_path)?; let mut context = context_from_meta_files(&meta, &file_path)?;
let theme = config.theme.unwrap_or(DEFAULT_THEME.to_string()); let theme = config.theme.unwrap_or(DEFAULT_THEME.to_string());
for file in files {
for file in content {
let file_name = file.with_extension("html"); let file_name = file.with_extension("html");
let output_path = file_path.to_output(&file_name)?; let output_path = file_path.to_output(&file_name)?;
@ -136,5 +156,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
Roxy::process_file(&file, &output_path, &mut parser).unwrap(); Roxy::process_file(&file, &output_path, &mut parser).unwrap();
} }
copy_static(&files, &file_path)?;
Ok(()) Ok(())
} }