cs-trace 0.14.0

Tracing utilities.
Documentation
use core::fmt;

use tracing::{info, trace, debug, warn, error, Span};
use crate::Tracer;

pub struct Trace {
    trace_tree_name: &'static str,
    trace_span: Span,
    info_span: Span,
    debug_span: Span,
    warn_span: Span,
    error_span: Span,
}

impl Tracer for Trace {
    fn trace_tree_name(&self) -> &'static str {
        return &self.trace_tree_name;
    }

    fn span(&self) -> &Span {
        return &self.trace_span;
    }

    fn trace(&self, message: &str) -> &dyn Tracer {
        let _enter = self.trace_span.enter();
        trace!(message);
        
        return self;
    }

    fn debug(&self, message: &str) -> &dyn Tracer {
        let _enter = self.debug_span.enter();
        debug!(message);

        return self;
    }

    fn info(&self, message: &str) -> &dyn Tracer {
        let _enter = self.info_span.enter();
        info!(message);

        return self;
    }

    fn warn(&self, message: &str) -> &dyn Tracer {
        let _enter = self.warn_span.enter();
        warn!(message);

        return self;
    }

    fn error(&self, message: &str) -> &dyn Tracer {
        let _enter = self.error_span.enter();
        error!(message);

        return self;
    }

    fn clone_trace(&self) -> Box<dyn Tracer> {
        return Box::new(
            Trace {
                trace_tree_name: self.trace_tree_name,
                trace_span: self.trace_span.clone(),
                info_span: self.info_span.clone(),
                debug_span: self.debug_span.clone(),
                warn_span: self.warn_span.clone(),
                error_span: self.error_span.clone(),
            },
        );
    }
}

impl Trace {
    pub fn new(
        name: &'static str,
        trace_span: Span,
        info_span: Span,
        debug_span: Span,
        warn_span: Span,
        error_span: Span,
    ) -> Box<dyn Tracer> {
        return Box::new(
            Trace {
                trace_span,
                info_span,
                debug_span,
                warn_span,
                error_span,
                trace_tree_name: name,
            },
        );
    }
}

impl fmt::Display for Trace {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        return write!(f, "{}", "");
    }
}

impl fmt::Debug for Trace {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        return write!(f, "{}", "");
    }
}

#[macro_export]
macro_rules! create_trace {
    ($name:expr) => {
        {
            cs_trace::Trace::new(
                $name,
                cs_trace::tracing_macros::trace_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::info_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::debug_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::warn_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::error_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
            )
        };
    };
}

#[macro_export]
macro_rules! child {
    ($parent_trace:ident, $name:expr) => {
        {
            let parent_span = $parent_trace.span();

            cs_trace::Trace::new(
                $parent_trace.trace_tree_name(),
                cs_trace::tracing_macros::trace_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::info_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::debug_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::warn_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::error_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
            )
        };
    };

    (&$parent_trace:ident, $name:expr) => {
        {
            let parent_span = $parent_trace.span();

            cs_trace::Trace::new(
                $parent_trace.trace_tree_name(),
                cs_trace::tracing_macros::trace_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::info_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::debug_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::warn_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
                cs_trace::tracing_macros::error_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
            )
        };
    };
}