extern crate ansi_term; extern crate pathdiff; extern crate pulldown_cmark; extern crate regex; #[macro_use] extern crate serde_derive; #[macro_use] extern crate structopt; extern crate toml; mod logger; mod options; mod error; mod config_toml; mod config; mod template; mod renderer; mod builder; mod new_page; mod file_writer; use structopt::StructOpt; use logger::{LogLevel, Logger}; use options::{Opt, Subcommands}; fn main() { let opt = Opt::from_args(); let log_level = (3 - opt.quiet as i8 + opt.verbose as i8).max(0).min(5); let logger = Logger::new(LogLevel::from(log_level as u8)); match opt.cmd { Subcommands::Build(ops) => match builder::build(&logger, &ops) { Ok(_) => logger.log(LogLevel::DETAILER, "Building finished successfully."), Err(err) => { logger.log(err.severity(), err.description()); logger.log(LogLevel::SEVERE, "Aborting building due to error."); } }, Subcommands::New(ops) => match new_page::generate_new_page(ops, &logger) { Ok(_) => logger.log( LogLevel::DETAILER, "Generating the new page finished successfully.", ), Err(err) => { logger.log(err.severity(), err.description()); logger.log(LogLevel::SEVERE, "Aborting building due to error."); } }, } }