diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/src/main.rs b/src/main.rs index 6c8c723..397171c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,15 +15,14 @@ extern crate quick_error; use std::error::Error as StdError; use std::fmt; -use std::io::Write; mod api; mod bt; mod cache; +mod output; mod render; use clap::{App, Arg, ArgMatches}; -use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor}; use api::{Api, Profession, Skill}; use bt::{BuildTemplate, ExtraData, Legend, TraitChoice, Traitline}; @@ -273,6 +272,13 @@ fn run() -> MainResult<()> { .conflicts_with_all(&["profession", "skill"]), ) .arg( + Arg::with_name("quiet") + .help("Surpress console output except for the chat code.") + .short("q") + .long("quiet") + .takes_value(false), + ) + .arg( Arg::with_name("outfile") .help("Specifies the output filename") .short("o") @@ -289,40 +295,28 @@ fn run() -> MainResult<()> { run_searching(&mut api, &matches)? }; - println!("Chat code: {}", build.chatlink()); + if !matches.is_present("quiet") { + output::show_build_template(&build)?; + } else { + println!("{}", build.chatlink()); + } let mut renderer = render::Renderer::new(&mut api, Default::default()); let img = renderer.render_buildtemplate(&build).unwrap(); let filename = matches.value_of("outfile").unwrap(); img.save(filename)?; + if !matches.is_present("quiet") { + println!("Image saved in {}", filename); + } + Ok(()) } fn main() { let result = run(); if let Err(e) = result { - let mut error_color = ColorSpec::new(); - error_color.set_fg(Some(Color::Red)); - let mut stderr = StandardStream::stderr(ColorChoice::Auto); - stderr.set_color(&error_color).unwrap(); - write!(stderr, "[Error]").unwrap(); - stderr.reset().unwrap(); - writeln!(stderr, " {}", e).unwrap(); - - let mut source = e.source(); - if source.is_none() { - source = e.cause(); - } - while let Some(s) = source { - stderr.set_color(&error_color).unwrap(); - write!(stderr, " [caused by]").unwrap(); - stderr.reset().unwrap(); - writeln!(stderr, " {}", s).unwrap(); - source = s.source(); - if source.is_none() { - source = s.cause(); - } - } + output::show_error(e.as_ref()).expect("Error while displaying error"); + std::process::exit(1); } } |