61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
use std::fs::read_to_string;
|
|
pub mod config;
|
|
pub mod emoji;
|
|
pub mod index;
|
|
use mlem::*;
|
|
use std::env;
|
|
|
|
fn main() {
|
|
let args: Vec<String> = env::args().collect();
|
|
|
|
if args.len() == 1 {
|
|
generate();
|
|
} else if args[1] == "create" {
|
|
create_default_env()
|
|
} else {
|
|
eprintln!("Option not recognized");
|
|
std::process::exit(1);
|
|
}
|
|
}
|
|
|
|
fn generate() {
|
|
let config = config::read_config();
|
|
let raw_files = read_src_files(&config.src_dir);
|
|
let mut post_index: Vec<index::BlogPost> = Vec::new();
|
|
|
|
for file in raw_files {
|
|
let mut markdown = read_to_string(file.path).expect("File does not exist");
|
|
markdown = emoji::emoji_pass(&markdown, &config.emoji_config);
|
|
|
|
let (html, index_content) = generate_blog_entry(markdown, &config.templates_dir);
|
|
write_to_fs(
|
|
html,
|
|
&config.output_dir,
|
|
&file.file_name.clone().into_string().unwrap(),
|
|
);
|
|
|
|
post_index.push(index::BlogPost::new(
|
|
file.title,
|
|
file.date.format("%Y-%m-%d").to_string(),
|
|
file.date.timestamp(),
|
|
index_content,
|
|
format!("{}.html", file.file_name.to_str().unwrap()),
|
|
));
|
|
}
|
|
let index = index::generate(post_index, &config.templates_dir);
|
|
|
|
std::fs::write(format!("{}/index.html", config.output_dir), index)
|
|
.unwrap_or_else(|_| panic!("Error writing index"));
|
|
}
|
|
|
|
fn create_default_env() {
|
|
println!("Writing a default mlem.toml");
|
|
let config = config::Config::default();
|
|
let toml_config = toml::to_string(&config).unwrap();
|
|
std::fs::write("mlem.toml", toml_config).unwrap();
|
|
println!("Creating default directorys");
|
|
std::fs::create_dir(config.output_dir).unwrap();
|
|
std::fs::create_dir(config.src_dir).unwrap();
|
|
std::fs::create_dir(config.templates_dir).unwrap();
|
|
}
|