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}