orbis_plugin_api/sdk/
log.rs

1//! Logging utilities for plugins.
2//!
3//! Provides convenient logging macros that work in WASM.
4//!
5//! # Example
6//!
7//! ```rust,ignore
8//! use orbis_plugin_api::sdk::log;
9//!
10//! log::info!("Processing request for user {}", user_id);
11//! log::error!("Failed to process: {}", error);
12//! log::debug!("Debug info: {:?}", data);
13//! ```
14
15/// Log level constants matching the host runtime
16pub mod level {
17    pub const ERROR: i32 = 0;
18    pub const WARN: i32 = 1;
19    pub const INFO: i32 = 2;
20    pub const DEBUG: i32 = 3;
21    pub const TRACE: i32 = 4;
22}
23
24/// Log a message at the specified level
25#[cfg(target_arch = "wasm32")]
26#[inline]
27pub fn log_at_level(level: i32, message: &str) {
28    unsafe {
29        super::ffi::log(level, message.as_ptr() as i32, message.len() as i32);
30    }
31}
32
33/// Log a message (non-WASM stub - prints to stderr)
34#[cfg(not(target_arch = "wasm32"))]
35#[inline]
36pub fn log_at_level(level: i32, message: &str) {
37    let level_str = match level {
38        0 => "ERROR",
39        1 => "WARN",
40        2 => "INFO",
41        3 => "DEBUG",
42        _ => "TRACE",
43    };
44    eprintln!("[{}] {}", level_str, message);
45}
46
47/// Log an error message
48#[macro_export]
49macro_rules! log_error {
50    ($($arg:tt)*) => {
51        $crate::sdk::log::log_at_level($crate::sdk::log::level::ERROR, &format!($($arg)*))
52    };
53}
54
55/// Log a warning message
56#[macro_export]
57macro_rules! log_warn {
58    ($($arg:tt)*) => {
59        $crate::sdk::log::log_at_level($crate::sdk::log::level::WARN, &format!($($arg)*))
60    };
61}
62
63/// Log an info message
64#[macro_export]
65macro_rules! log_info {
66    ($($arg:tt)*) => {
67        $crate::sdk::log::log_at_level($crate::sdk::log::level::INFO, &format!($($arg)*))
68    };
69}
70
71/// Log a debug message
72#[macro_export]
73macro_rules! log_debug {
74    ($($arg:tt)*) => {
75        $crate::sdk::log::log_at_level($crate::sdk::log::level::DEBUG, &format!($($arg)*))
76    };
77}
78
79/// Log a trace message
80#[macro_export]
81macro_rules! log_trace {
82    ($($arg:tt)*) => {
83        $crate::sdk::log::log_at_level($crate::sdk::log::level::TRACE, &format!($($arg)*))
84    };
85}
86
87// Re-export macros for convenient access
88pub use log_debug as debug;
89pub use log_error as error;
90pub use log_info as info;
91pub use log_trace as trace;
92pub use log_warn as warn;