use super::{Ctx, Handler};
use crate::capability::logging::logging;
use async_trait::async_trait;
use tracing::instrument;
pub mod unversioned_logging_bindings {
wasmtime::component::bindgen!({
world: "unversioned-logging",
async: true,
with: {
"wasi:logging/logging": crate::capability::unversioned_logging,
},
});
}
pub mod logging_bindings {
wasmtime::component::bindgen!({
world: "logging",
async: true,
with: {
"wasi:logging/logging": crate::capability::logging,
},
});
}
#[async_trait]
pub trait Logging {
async fn log(
&self,
level: logging::Level,
context: String,
message: String,
) -> anyhow::Result<()>;
}
#[async_trait]
impl<H: Handler> logging::Host for Ctx<H> {
#[instrument(skip_all)]
async fn log(
&mut self,
level: logging::Level,
context: String,
message: String,
) -> anyhow::Result<()> {
self.handler.log(level, context, message).await
}
}
#[async_trait]
impl<H: Handler> crate::capability::unversioned_logging::logging::Host for Ctx<H> {
#[instrument(skip_all)]
async fn log(
&mut self,
level: crate::capability::unversioned_logging::logging::Level,
context: String,
message: String,
) -> anyhow::Result<()> {
use crate::capability::unversioned_logging::logging::Level;
let level = match level {
Level::Trace => logging::Level::Trace,
Level::Debug => logging::Level::Debug,
Level::Info => logging::Level::Info,
Level::Warn => logging::Level::Warn,
Level::Error => logging::Level::Error,
Level::Critical => logging::Level::Critical,
};
self.handler.log(level, context, message).await
}
}