use serde::{Deserialize, Serialize};
use crate::error::Result;
use std::str::FromStr;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum LogLevel {
#[serde(rename = "debug")]
Debug,
#[serde(rename = "info")]
Info,
#[serde(rename = "warn")]
Warn,
#[serde(rename = "error")]
Error,
}
impl std::fmt::Display for LogLevel {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let s = match *self {
LogLevel::Debug => "debug",
LogLevel::Info => "info",
LogLevel::Warn => "warn",
LogLevel::Error => "error",
};
write!(f, "{}", s)
}
}
impl FromStr for LogLevel {
type Err = crate::error::Error;
fn from_str(s: &str) -> Result<Self> {
match s {
"debug" => Ok(LogLevel::Debug),
"info" => Ok(LogLevel::Info),
"warn" => Ok(LogLevel::Warn),
"error" => Ok(LogLevel::Error),
_ => Ok(LogLevel::Info),
}
}
}