balius-sdk 0.5.2

SDK for building Headless dApps on UTxO-based blockchains
Documentation
use tracing_subscriber::{
    field::VisitOutput,
    fmt::format::{DefaultVisitor, Writer},
    layer::SubscriberExt,
    util::SubscriberInitExt,
    Layer, Registry,
};

#[derive(Default)]
pub struct BaliusLayer {}

impl BaliusLayer {
    pub fn new() -> Self {
        Self::default()
    }
}

impl<S: tracing::Subscriber> Layer<S> for BaliusLayer {
    fn on_event(
        &self,
        event: &tracing::Event<'_>,
        _ctx: tracing_subscriber::layer::Context<'_, S>,
    ) {
        let context = event.metadata().target();
        let level = match *event.metadata().level() {
            tracing::Level::TRACE => crate::wit::balius::app::logging::Level::Trace,
            tracing::Level::DEBUG => crate::wit::balius::app::logging::Level::Debug,
            tracing::Level::INFO => crate::wit::balius::app::logging::Level::Info,
            tracing::Level::WARN => crate::wit::balius::app::logging::Level::Warn,
            tracing::Level::ERROR => crate::wit::balius::app::logging::Level::Error,
        };

        let mut message = String::new();
        let mut visitor = DefaultVisitor::new(Writer::new(&mut message), true);
        event.record(&mut visitor);
        if visitor.finish().is_err() {
            message = "[error formatting message]".to_string();
        }

        crate::wit::balius::app::logging::log(level, context, &message);
    }
}

pub fn init() {
    Registry::default().with(BaliusLayer::new()).init();
}