Skip to main content

feagi_hal/hal/
logger.rs

1// Copyright 2025 Neuraville Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4/// Logging abstraction for embedded platforms
5pub trait Logger {
6    /// Log a message with specified level
7    ///
8    /// # Arguments
9    /// * `level` - Log level
10    /// * `message` - Message to log
11    fn log(&self, level: LogLevel, message: &str);
12
13    /// Log an error message
14    fn error(&self, message: &str) {
15        self.log(LogLevel::Error, message);
16    }
17
18    /// Log a warning message
19    fn warn(&self, message: &str) {
20        self.log(LogLevel::Warn, message);
21    }
22
23    /// Log an info message
24    fn info(&self, message: &str) {
25        self.log(LogLevel::Info, message);
26    }
27
28    /// Log a debug message
29    fn debug(&self, message: &str) {
30        self.log(LogLevel::Debug, message);
31    }
32
33    /// Log a trace message
34    fn trace(&self, message: &str) {
35        self.log(LogLevel::Trace, message);
36    }
37}
38
39/// Log level enum
40#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
41pub enum LogLevel {
42    /// Error: critical failures
43    Error = 1,
44    /// Warning: potential issues
45    Warn = 2,
46    /// Info: general information
47    Info = 3,
48    /// Debug: detailed debugging info
49    Debug = 4,
50    /// Trace: very detailed tracing
51    Trace = 5,
52}
53
54impl LogLevel {
55    /// Get log level as string
56    pub fn as_str(&self) -> &'static str {
57        match self {
58            LogLevel::Error => "ERROR",
59            LogLevel::Warn => "WARN",
60            LogLevel::Info => "INFO",
61            LogLevel::Debug => "DEBUG",
62            LogLevel::Trace => "TRACE",
63        }
64    }
65}