use core::fmt;
use core::str::FromStr;
#[ derive( Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord ) ]
pub struct VerbosityLevel( u8 );
impl VerbosityLevel
{
#[ must_use ]
#[ inline ]
pub fn get( self ) -> u8 { self.0 }
#[ must_use ]
#[ inline ]
pub fn from_u8_clamped( n : u8 ) -> Self { VerbosityLevel( n.min( 5 ) ) }
#[ must_use ]
#[ inline ]
pub fn shows_errors( self ) -> bool { self.0 >= 1 }
#[ must_use ]
#[ inline ]
pub fn shows_warnings( self ) -> bool { self.0 >= 2 }
#[ must_use ]
#[ inline ]
pub fn shows_progress( self ) -> bool { self.0 >= 3 }
#[ must_use ]
#[ inline ]
pub fn shows_verbose_detail( self ) -> bool { self.0 >= 4 }
#[ must_use ]
#[ inline ]
pub fn shows_debug( self ) -> bool { self.0 >= 5 }
}
impl Default for VerbosityLevel
{
#[ inline ]
fn default() -> Self { VerbosityLevel( 3 ) }
}
impl fmt::Display for VerbosityLevel
{
#[ inline ]
fn fmt( &self, f : &mut fmt::Formatter< '_ > ) -> fmt::Result
{
write!( f, "{}", self.0 )
}
}
impl FromStr for VerbosityLevel
{
type Err = String;
#[ inline ]
fn from_str( s : &str ) -> Result< Self, Self::Err >
{
let n : u8 = s.parse().map_err( | _ |
format!( "invalid verbosity level: {s}\nExpected integer 0–5" )
)?;
if n > 5
{
return Err( format!( "verbosity level out of range: {n}\nExpected 0–5" ) );
}
Ok( VerbosityLevel( n ) )
}
}