#[derive(Copy, Clone, Eq, PartialEq, Debug, Ord, PartialOrd)]
pub enum ErrorLevel {
Info, Warning, Critical, }
pub trait ErrorLevelProvider {
fn error_level(&self) -> ErrorLevel;
}
pub fn most_severe_level(levels: &[ErrorLevel]) -> Option<ErrorLevel> {
levels.iter().copied().max()
}
pub fn most_severe_error(levels: &[impl ErrorLevelProvider]) -> Option<ErrorLevel> {
levels.iter().map(|provider| provider.error_level()).max()
}
pub fn most_severe_error_provider<'a, P>(levels: &[&'a P]) -> Option<&'a P>
where
P: ErrorLevelProvider,
{
levels
.iter()
.max_by_key(|provider| provider.error_level())
.copied() }