summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2021-11-07 23:09:34 +0100
committerMinijackson <minijackson@riseup.net>2021-11-07 23:09:34 +0100
commit517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a (patch)
tree3140cf7b16727f4752633f4e6f5d098f23889af0 /src/main.rs
downloadpandoc-docbook-517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a.tar.gz
pandoc-docbook-517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a.zip
initial commit with PoC
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..b5de3bf
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,93 @@
1mod build;
2mod cli;
3mod config;
4mod utils;
5mod filters;
6
7use std::path::PathBuf;
8
9use cli::Cli;
10
11use clap::Parser;
12use eyre::{Result, WrapErr};
13use log::trace;
14
15fn init_log(quiet: bool, verbosity: u8) {
16 use log::LevelFilter;
17
18 let verbosity = match verbosity {
19 0 => LevelFilter::Info,
20 1 => LevelFilter::Debug,
21 _ => LevelFilter::Trace,
22 };
23
24 let env = env_logger::Env::default().default_filter_or(if quiet {
25 "off".to_string()
26 } else {
27 format!("pandoc_docbook={}", verbosity)
28 });
29
30 let mut builder = env_logger::Builder::from_env(env);
31
32 // Shamelessly taken from pretty_env_logger
33 builder.format(move |f, record| {
34 use std::io::Write;
35
36 let target = record.target();
37
38 let mut style = f.style();
39 let level = colored_level(&mut style, record.level());
40
41 let mut style = f.style();
42 let target = style.set_bold(true).value(target);
43
44 if verbosity >= LevelFilter::Debug {
45 writeln!(f, " {} {} > {}", level, target, record.args())
46 } else {
47 writeln!(f, " {} > {}", level, record.args())
48 }
49 });
50
51 builder.init();
52}
53
54fn colored_level<'a>(
55 style: &'a mut env_logger::fmt::Style,
56 level: log::Level,
57) -> env_logger::fmt::StyledValue<'a, &'static str> {
58 use env_logger::fmt::Color;
59 use log::Level;
60
61 match level {
62 Level::Trace => style.set_color(Color::Magenta).value("TRACE"),
63 Level::Debug => style.set_color(Color::Blue).value("DEBUG"),
64 Level::Info => style.set_color(Color::Green).value("INFO "),
65 Level::Warn => style.set_color(Color::Yellow).value("WARN "),
66 Level::Error => style.set_color(Color::Red).value("ERROR"),
67 }
68}
69
70fn main() -> Result<()> {
71 color_eyre::install()?;
72
73 let cli = Cli::parse();
74 init_log(cli.quiet, cli.verbose);
75
76 let config = config::Config::new(&cli.config)?;
77 trace!("Parsed configuration: {:?}", config);
78
79 std::env::set_current_dir(
80 PathBuf::from(cli.config)
81 .parent()
82 .expect("Configuration file has no parent"),
83 )
84 .wrap_err("Could not change current directory to the configuration file's directory")?;
85
86 match cli.subcommand {
87 cli::SubCommand::Build => {
88 build::do_build(&config)?
89 }
90 }
91
92 Ok(())
93}