near_o11y/
span_wrapped_msg.rs1use tracing::{Span, debug_span};
2
3#[derive(Debug, Clone)]
4pub struct SpanWrapped<T> {
5 _span: Span,
6 msg: T,
7}
8
9impl<T> SpanWrapped<T> {
10 pub fn span_unwrap(self) -> T {
11 self.msg
12 }
13}
14
15impl<T> From<T> for SpanWrapped<T> {
16 fn from(msg: T) -> Self {
17 Self { _span: debug_span!("pending_message", message_type = pretty_type_name::<T>()), msg }
18 }
19}
20
21impl<T: PartialEq> PartialEq for SpanWrapped<T> {
22 fn eq(&self, other: &Self) -> bool {
23 self.msg == other.msg
24 }
25}
26
27impl<T: Eq> Eq for SpanWrapped<T> {}
28
29pub trait SpanWrappedMessageExt: Sized {
30 fn span_wrap(self) -> SpanWrapped<Self> {
31 self.into()
32 }
33}
34
35impl<T> SpanWrappedMessageExt for T {}
36
37fn pretty_type_name<T>() -> &'static str {
41 std::any::type_name::<T>().split("::").last().unwrap()
42}