use anstream::{eprint, print};
use indicatif::ProgressDrawTarget;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Printer {
Silent,
Quiet,
Default,
Verbose,
NoProgress,
}
impl Printer {
pub fn target(self) -> ProgressDrawTarget {
match self {
Self::Silent => ProgressDrawTarget::hidden(),
Self::Quiet => ProgressDrawTarget::hidden(),
Self::Default => ProgressDrawTarget::stderr(),
Self::Verbose => ProgressDrawTarget::hidden(),
Self::NoProgress => ProgressDrawTarget::hidden(),
}
}
pub(crate) fn stdout_important(self) -> Stdout {
match self {
Self::Silent => Stdout::Disabled,
Self::Quiet => Stdout::Enabled,
Self::Default => Stdout::Enabled,
Self::Verbose => Stdout::Enabled,
Self::NoProgress => Stdout::Enabled,
}
}
pub(crate) fn stdout(self) -> Stdout {
match self {
Self::Silent => Stdout::Disabled,
Self::Quiet => Stdout::Disabled,
Self::Default => Stdout::Enabled,
Self::Verbose => Stdout::Enabled,
Self::NoProgress => Stdout::Enabled,
}
}
pub(crate) fn stderr(self) -> Stderr {
match self {
Self::Silent => Stderr::Disabled,
Self::Quiet => Stderr::Disabled,
Self::Default => Stderr::Enabled,
Self::Verbose => Stderr::Enabled,
Self::NoProgress => Stderr::Enabled,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Stdout {
Enabled,
Disabled,
}
impl std::fmt::Write for Stdout {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
match self {
Self::Enabled => {
#[allow(clippy::print_stdout, clippy::ignored_unit_patterns)]
{
print!("{s}");
}
}
Self::Disabled => {}
}
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Stderr {
Enabled,
Disabled,
}
impl std::fmt::Write for Stderr {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
match self {
Self::Enabled => {
#[allow(clippy::print_stderr, clippy::ignored_unit_patterns)]
{
eprint!("{s}");
}
}
Self::Disabled => {}
}
Ok(())
}
}