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),
)
};
};
}