use super::{NullPrint, Print, StandardPrint, TestPrint};
#[derive(Clone)]
pub enum Printer {
Standard(StandardPrint),
Null(NullPrint),
Test(TestPrint),
}
impl Printer {
pub fn standard() -> Self {
Self::Standard(StandardPrint)
}
pub fn null() -> Self {
Self::Null(NullPrint)
}
pub fn test() -> Self {
Self::Test(TestPrint::new())
}
pub fn as_test(&self) -> Option<&TestPrint> {
match self {
Self::Test(test_print) => Some(test_print),
_ => None,
}
}
}
impl Print for Printer {
fn print_fmt(&self, args: std::fmt::Arguments<'_>) {
match self {
Self::Standard(p) => p.print_fmt(args),
Self::Null(p) => p.print_fmt(args),
Self::Test(p) => p.print_fmt(args),
}
}
fn println_fmt(&self, args: std::fmt::Arguments<'_>) {
match self {
Self::Standard(p) => p.println_fmt(args),
Self::Null(p) => p.println_fmt(args),
Self::Test(p) => p.println_fmt(args),
}
}
fn eprint_fmt(&self, args: std::fmt::Arguments<'_>) {
match self {
Self::Standard(p) => p.eprint_fmt(args),
Self::Null(p) => p.eprint_fmt(args),
Self::Test(p) => p.eprint_fmt(args),
}
}
fn eprintln_fmt(&self, args: std::fmt::Arguments<'_>) {
match self {
Self::Standard(p) => p.eprintln_fmt(args),
Self::Null(p) => p.eprintln_fmt(args),
Self::Test(p) => p.eprintln_fmt(args),
}
}
}