diff options
author | Minijackson <minijackson@riseup.net> | 2021-11-07 23:09:34 +0100 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2021-11-07 23:09:34 +0100 |
commit | 517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a (patch) | |
tree | 3140cf7b16727f4752633f4e6f5d098f23889af0 /src/main.rs | |
download | pandoc-docbook-517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a.tar.gz pandoc-docbook-517cabe8ec54d0bf5f5f9cc9089d76a1fad7bb6a.zip |
initial commit with PoC
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 93 |
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 @@ | |||
1 | mod build; | ||
2 | mod cli; | ||
3 | mod config; | ||
4 | mod utils; | ||
5 | mod filters; | ||
6 | |||
7 | use std::path::PathBuf; | ||
8 | |||
9 | use cli::Cli; | ||
10 | |||
11 | use clap::Parser; | ||
12 | use eyre::{Result, WrapErr}; | ||
13 | use log::trace; | ||
14 | |||
15 | fn 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 | |||
54 | fn 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 | |||
70 | fn 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 | } | ||