use log::Level;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialOrd, PartialEq, Copy, Clone, Debug)]
pub enum GelfLevel {
Emergency = 0,
Alert = 1,
Critical = 2,
Error = 3,
Warning = 4,
Notice = 5,
Informational = 6,
Debugging = 7,
}
impl Default for GelfLevel {
fn default() -> GelfLevel {
GelfLevel::Alert
}
}
impl From<Level> for GelfLevel {
fn from(level: Level) -> GelfLevel {
match level {
Level::Error => GelfLevel::Error,
Level::Warn => GelfLevel::Warning,
Level::Info => GelfLevel::Informational,
Level::Debug => GelfLevel::Debugging,
Level::Trace => GelfLevel::Debugging,
}
}
}
impl From<GelfLevel> for Level {
fn from(level: GelfLevel) -> Self {
match level {
GelfLevel::Emergency => Level::Error,
GelfLevel::Alert => Level::Error,
GelfLevel::Critical => Level::Error,
GelfLevel::Error => Level::Error,
GelfLevel::Warning => Level::Warn,
GelfLevel::Notice => Level::Info,
GelfLevel::Informational => Level::Info,
GelfLevel::Debugging => Level::Debug,
}
}
}
impl From<u32> for GelfLevel {
fn from(level: u32) -> Self {
match level {
0 => GelfLevel::Emergency,
1 => GelfLevel::Alert,
2 => GelfLevel::Critical,
3 => GelfLevel::Error,
4 => GelfLevel::Warning,
5 => GelfLevel::Notice,
6 => GelfLevel::Informational,
7 => GelfLevel::Debugging,
_ => GelfLevel::Alert,
}
}
}
impl From<GelfLevel> for &'static str {
fn from(level: GelfLevel) -> Self {
match level {
GelfLevel::Emergency => "Emergency",
GelfLevel::Alert => "Alert",
GelfLevel::Critical => "Critical",
GelfLevel::Error => "Error",
GelfLevel::Warning => "Warning",
GelfLevel::Notice => "Notice",
GelfLevel::Informational => "Informational",
GelfLevel::Debugging => "Debugging",
}
}
}