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