hyperlight_common/flatbuffer_wrappers/
guest_log_level.rsuse anyhow::{bail, Error, Result};
use log::Level;
use strum_macros::EnumIter;
#[cfg(feature = "tracing")]
use tracing::{instrument, Span};
use crate::flatbuffers::hyperlight::generated::LogLevel as FbLogLevel;
#[repr(u8)]
#[derive(Copy, Clone, Eq, PartialEq, Debug, EnumIter)]
pub enum LogLevel {
Trace = 0,
Debug = 1,
Information = 2,
Warning = 3,
Error = 4,
Critical = 5,
None = 6,
}
impl From<u8> for LogLevel {
#[cfg_attr(feature = "tracing", instrument(skip_all, parent = Span::current(), level= "Trace"))]
fn from(val: u8) -> LogLevel {
match val {
0 => LogLevel::Trace,
1 => LogLevel::Debug,
2 => LogLevel::Information,
3 => LogLevel::Warning,
4 => LogLevel::Error,
5 => LogLevel::Critical,
_ => LogLevel::None,
}
}
}
impl TryFrom<&FbLogLevel> for LogLevel {
type Error = Error;
#[cfg_attr(feature = "tracing", instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace"))]
fn try_from(val: &FbLogLevel) -> Result<LogLevel> {
match *val {
FbLogLevel::Trace => Ok(LogLevel::Trace),
FbLogLevel::Debug => Ok(LogLevel::Debug),
FbLogLevel::Information => Ok(LogLevel::Information),
FbLogLevel::Warning => Ok(LogLevel::Warning),
FbLogLevel::Error => Ok(LogLevel::Error),
FbLogLevel::Critical => Ok(LogLevel::Critical),
FbLogLevel::None => Ok(LogLevel::None),
_ => {
bail!("Unsupported Flatbuffers log level: {:?}", val);
}
}
}
}
impl From<&LogLevel> for FbLogLevel {
#[cfg_attr(feature = "tracing", instrument(skip_all, parent = Span::current(), level= "Trace"))]
fn from(val: &LogLevel) -> FbLogLevel {
match val {
LogLevel::Critical => FbLogLevel::Critical,
LogLevel::Debug => FbLogLevel::Debug,
LogLevel::Error => FbLogLevel::Error,
LogLevel::Information => FbLogLevel::Information,
LogLevel::None => FbLogLevel::None,
LogLevel::Trace => FbLogLevel::Trace,
LogLevel::Warning => FbLogLevel::Warning,
}
}
}
impl From<&LogLevel> for Level {
fn from(val: &LogLevel) -> Level {
match val {
LogLevel::Trace => Level::Trace,
LogLevel::Debug => Level::Debug,
LogLevel::Information => Level::Info,
LogLevel::Warning => Level::Warn,
LogLevel::Error => Level::Error,
LogLevel::Critical => Level::Error,
LogLevel::None => Level::Trace,
}
}
}
impl From<Level> for LogLevel {
fn from(val: Level) -> LogLevel {
match val {
Level::Trace => LogLevel::Trace,
Level::Debug => LogLevel::Debug,
Level::Info => LogLevel::Information,
Level::Warn => LogLevel::Warning,
Level::Error => LogLevel::Error,
}
}
}