hyperlight_common/flatbuffer_wrappers/
guest_log_level.rs1use anyhow::{Error, Result, bail};
5use log::Level;
6#[cfg(feature = "tracing")]
7use tracing::{Span, instrument};
8
9use crate::flatbuffers::hyperlight::generated::LogLevel as FbLogLevel;
10
11#[repr(u8)]
12#[derive(Copy, Clone, Eq, PartialEq, Debug)]
13pub enum LogLevel {
14 Trace = 0,
15 Debug = 1,
16 Information = 2,
17 Warning = 3,
18 Error = 4,
19 Critical = 5,
20 None = 6,
21}
22
23impl From<u8> for LogLevel {
24 #[cfg_attr(feature = "tracing", instrument(skip_all, parent = Span::current(), level= "Trace"))]
25 fn from(val: u8) -> LogLevel {
26 match val {
27 0 => LogLevel::Trace,
28 1 => LogLevel::Debug,
29 2 => LogLevel::Information,
30 3 => LogLevel::Warning,
31 4 => LogLevel::Error,
32 5 => LogLevel::Critical,
33 _ => LogLevel::None,
34 }
35 }
36}
37
38impl TryFrom<&FbLogLevel> for LogLevel {
39 type Error = Error;
40 #[cfg_attr(feature = "tracing", instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace"))]
41 fn try_from(val: &FbLogLevel) -> Result<LogLevel> {
42 match *val {
43 FbLogLevel::Trace => Ok(LogLevel::Trace),
44 FbLogLevel::Debug => Ok(LogLevel::Debug),
45 FbLogLevel::Information => Ok(LogLevel::Information),
46 FbLogLevel::Warning => Ok(LogLevel::Warning),
47 FbLogLevel::Error => Ok(LogLevel::Error),
48 FbLogLevel::Critical => Ok(LogLevel::Critical),
49 FbLogLevel::None => Ok(LogLevel::None),
50 _ => {
51 bail!("Unsupported Flatbuffers log level: {:?}", val);
52 }
53 }
54 }
55}
56
57impl From<&LogLevel> for FbLogLevel {
58 #[cfg_attr(feature = "tracing", instrument(skip_all, parent = Span::current(), level= "Trace"))]
59 fn from(val: &LogLevel) -> FbLogLevel {
60 match val {
61 LogLevel::Critical => FbLogLevel::Critical,
62 LogLevel::Debug => FbLogLevel::Debug,
63 LogLevel::Error => FbLogLevel::Error,
64 LogLevel::Information => FbLogLevel::Information,
65 LogLevel::None => FbLogLevel::None,
66 LogLevel::Trace => FbLogLevel::Trace,
67 LogLevel::Warning => FbLogLevel::Warning,
68 }
69 }
70}
71
72impl From<&LogLevel> for Level {
73 fn from(val: &LogLevel) -> Level {
78 match val {
79 LogLevel::Trace => Level::Trace,
80 LogLevel::Debug => Level::Debug,
81 LogLevel::Information => Level::Info,
82 LogLevel::Warning => Level::Warn,
83 LogLevel::Error => Level::Error,
84 LogLevel::Critical => Level::Error,
85 LogLevel::None => Level::Trace,
87 }
88 }
89}
90
91impl From<Level> for LogLevel {
92 fn from(val: Level) -> LogLevel {
93 match val {
94 Level::Trace => LogLevel::Trace,
95 Level::Debug => LogLevel::Debug,
96 Level::Info => LogLevel::Information,
97 Level::Warn => LogLevel::Warning,
98 Level::Error => LogLevel::Error,
99 }
100 }
101}