use crate::api::SharedObject;
#[allow(unused_imports)]
use rhai::plugin::{
mem, Dynamic, FnAccess, FnNamespace, ImmutableString, Module, NativeCallContext,
PluginFunction, RhaiResult, TypeId,
};
pub use logging::*;
#[rhai::plugin::export_module]
mod logging {
#[rhai_fn(global, name = "log")]
#[allow(clippy::cognitive_complexity)]
pub fn log(level: &str, message: &str) {
match <tracing::Level as std::str::FromStr>::from_str(level) {
Ok(level) => match level {
tracing::Level::TRACE => tracing::trace!(message),
tracing::Level::DEBUG => tracing::debug!(message),
tracing::Level::INFO => tracing::info!(message),
tracing::Level::WARN => tracing::warn!(message),
tracing::Level::ERROR => tracing::error!(message),
},
Err(e) => {
tracing::warn!(
"level `{}` is invalid: `{}`. Message was: '{}'",
level,
e,
message,
);
}
}
}
#[doc(hidden)]
#[rhai_fn(global, name = "log")]
pub fn log_str_obj(level: &str, message: SharedObject) {
log(level, &message.to_string());
}
#[doc(hidden)]
#[rhai_fn(global, name = "log", pure)]
pub fn log_obj_str(level: &mut SharedObject, message: &str) {
log(&level.to_string(), message);
}
#[doc(hidden)]
#[rhai_fn(global, name = "log", pure)]
pub fn log_obj_obj(level: &mut SharedObject, message: SharedObject) {
log(&level.to_string(), &message.to_string());
}
}