cs_trace/
trace.rs

1use core::fmt;
2
3use tracing::{info, trace, debug, warn, error, Span};
4use crate::Tracer;
5
6pub struct Trace {
7    trace_tree_name: &'static str,
8    trace_span: Span,
9    info_span: Span,
10    debug_span: Span,
11    warn_span: Span,
12    error_span: Span,
13}
14
15impl Tracer for Trace {
16    fn trace_tree_name(&self) -> &'static str {
17        return &self.trace_tree_name;
18    }
19
20    fn span(&self) -> &Span {
21        return &self.trace_span;
22    }
23
24    fn trace(&self, message: &str) -> &dyn Tracer {
25        let _enter = self.trace_span.enter();
26        trace!(message);
27        
28        return self;
29    }
30
31    fn debug(&self, message: &str) -> &dyn Tracer {
32        let _enter = self.debug_span.enter();
33        debug!(message);
34
35        return self;
36    }
37
38    fn info(&self, message: &str) -> &dyn Tracer {
39        let _enter = self.info_span.enter();
40        info!(message);
41
42        return self;
43    }
44
45    fn warn(&self, message: &str) -> &dyn Tracer {
46        let _enter = self.warn_span.enter();
47        warn!(message);
48
49        return self;
50    }
51
52    fn error(&self, message: &str) -> &dyn Tracer {
53        let _enter = self.error_span.enter();
54        error!(message);
55
56        return self;
57    }
58
59    fn clone_trace(&self) -> Box<dyn Tracer> {
60        return Box::new(
61            Trace {
62                trace_tree_name: self.trace_tree_name,
63                trace_span: self.trace_span.clone(),
64                info_span: self.info_span.clone(),
65                debug_span: self.debug_span.clone(),
66                warn_span: self.warn_span.clone(),
67                error_span: self.error_span.clone(),
68            },
69        );
70    }
71}
72
73impl Trace {
74    pub fn new(
75        name: &'static str,
76        trace_span: Span,
77        info_span: Span,
78        debug_span: Span,
79        warn_span: Span,
80        error_span: Span,
81    ) -> Box<dyn Tracer> {
82        return Box::new(
83            Trace {
84                trace_span,
85                info_span,
86                debug_span,
87                warn_span,
88                error_span,
89                trace_tree_name: name,
90            },
91        );
92    }
93}
94
95impl fmt::Display for Trace {
96    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
97        return write!(f, "{}", "");
98    }
99}
100
101impl fmt::Debug for Trace {
102    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
103        return write!(f, "{}", "");
104    }
105}
106
107#[macro_export]
108macro_rules! create_trace {
109    ($name:expr) => {
110        {
111            cs_trace::Trace::new(
112                $name,
113                cs_trace::tracing_macros::trace_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
114                cs_trace::tracing_macros::info_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
115                cs_trace::tracing_macros::debug_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
116                cs_trace::tracing_macros::warn_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
117                cs_trace::tracing_macros::error_span!($name, cs_trace = cs_trace::EMPTY_FIELD),
118            )
119        };
120    };
121}
122
123#[macro_export]
124macro_rules! child {
125    ($parent_trace:ident, $name:expr) => {
126        {
127            let parent_span = $parent_trace.span();
128
129            cs_trace::Trace::new(
130                $parent_trace.trace_tree_name(),
131                cs_trace::tracing_macros::trace_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
132                cs_trace::tracing_macros::info_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
133                cs_trace::tracing_macros::debug_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
134                cs_trace::tracing_macros::warn_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
135                cs_trace::tracing_macros::error_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
136            )
137        };
138    };
139
140    (&$parent_trace:ident, $name:expr) => {
141        {
142            let parent_span = $parent_trace.span();
143
144            cs_trace::Trace::new(
145                $parent_trace.trace_tree_name(),
146                cs_trace::tracing_macros::trace_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
147                cs_trace::tracing_macros::info_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
148                cs_trace::tracing_macros::debug_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
149                cs_trace::tracing_macros::warn_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
150                cs_trace::tracing_macros::error_span!(parent: parent_span, $name, cs_trace = cs_trace::EMPTY_FIELD),
151            )
152        };
153    };
154}