mod formatter;
mod progress;
pub use formatter::OutputFormatter;
pub use progress::ProgressReporter;
use crate::cli::Args;
use crate::openssl::ParsedPfx;
use colored::*;
use console::Term;
use std::io::{self, Write};
#[derive(Debug, Clone)]
pub struct OutputConfig {
pub use_colors: bool,
pub verbose: bool,
pub interactive: bool,
}
impl OutputConfig {
pub fn from_args(args: &Args) -> Self {
let term = Term::stdout();
Self {
use_colors: term.features().colors_supported(),
verbose: args.verbose,
interactive: term.features().is_attended(),
}
}
}
pub struct OutputHandler {
config: OutputConfig,
term: Term,
}
impl OutputHandler {
pub fn new(config: OutputConfig) -> Self {
Self {
config,
term: Term::stdout(),
}
}
pub fn status(&mut self, message: &str) -> io::Result<()> {
if self.config.use_colors {
writeln!(self.term, "{} {}", "⚡".bright_yellow(), message.bold())?;
} else {
writeln!(self.term, "=> {}", message)?;
}
Ok(())
}
pub fn success(&mut self, message: &str) -> io::Result<()> {
if self.config.use_colors {
writeln!(self.term, "{} {}", "✓".bright_green(), message)?;
} else {
writeln!(self.term, "✓ {}", message)?;
}
Ok(())
}
pub fn info(&mut self, message: &str) -> io::Result<()> {
if self.config.verbose {
if self.config.use_colors {
writeln!(self.term, "{} {}", "ℹ".bright_blue(), message.dimmed())?;
} else {
writeln!(self.term, "i {}", message)?;
}
}
Ok(())
}
pub fn print_summary(&mut self, args: &Args, parsed: &ParsedPfx) -> io::Result<()> {
let formatter = OutputFormatter::new(&self.config);
formatter.print_summary(args, parsed, &mut self.term)
}
pub fn print_cert_info(&mut self, parsed: &ParsedPfx) -> io::Result<()> {
if self.config.verbose {
let formatter = OutputFormatter::new(&self.config);
formatter.print_cert_info(parsed, &mut self.term)?;
}
Ok(())
}
}