teascade-generator/src/main.rs

69 lines
2.2 KiB
Rust

extern crate pulldown_cmark;
extern crate regex;
#[macro_use]
extern crate serde_derive;
extern crate toml;
mod config_toml;
mod config;
mod template;
mod renderer;
use config::Config;
use template::Template;
use std::error::Error;
use std::fs::{create_dir_all, File};
use std::io::prelude::*;
const DEFAULT_CSS: &'static str = include_str!("templates/default-css.css");
const PAGE_TEMPLATE: &'static str = include_str!("templates/page-template.html");
const NAVBAR_ITEM: &'static str = include_str!("templates/navbar/item-template.html");
const NAVBAR_IMAGE_ITEM: &'static str = include_str!("templates/navbar/image-item-template.html");
fn main() {
println!("Fetching configs");
let config = match Config::new() {
Ok(config) => config,
Err(err) => panic!(err.description().to_owned()),
};
if config.global_config.website.use_default_css {
println!("Adding public/css/default.css");
create_dir_all("public/css").ok();
let mut file = File::create("public/css/default.css").unwrap();
file.write_all(DEFAULT_CSS.as_bytes()).ok();
}
println!("Generating page templates");
let page_template = Template::new(PAGE_TEMPLATE);
let mut navbar_content = String::new();
if config.global_config.navbar.is_some() {
let navbar_item_template = Template::new(NAVBAR_ITEM);
let navbar_image_item_template = Template::new(NAVBAR_IMAGE_ITEM);
println!("Rendering navbar");
match renderer::render_navbar(&config, navbar_item_template, navbar_image_item_template) {
Ok(navbar) => navbar_content = navbar,
Err(err) => panic!(err),
}
}
println!("Rendering public/test.html");
let rendered = match config.get_configs_for(0) {
Ok(page_config) => page_template.render(&Template::page_data_from(
page_config.clone(),
navbar_content,
renderer::render_markdown_content(&page_config).unwrap(),
)),
Err(err) => panic!(err),
};
println!("Writing public/test.html");
create_dir_all("public").ok();
let mut file = File::create("public/test.html").unwrap();
file.write_all(rendered.as_bytes()).ok();
println!("Done!");
}