tracing_subscriber/field/
display.rs1use super::{MakeVisitor, VisitFmt, VisitOutput};
3use tracing_core::field::{Field, Visit};
4
5use core::fmt;
6
7#[derive(Debug, Clone)]
10pub struct Messages<V>(V);
11
12impl<V> Messages<V> {
18 pub fn new(inner: V) -> Self {
23 Messages(inner)
24 }
25}
26
27impl<T, V> MakeVisitor<T> for Messages<V>
28where
29 V: MakeVisitor<T>,
30{
31 type Visitor = Messages<V::Visitor>;
32
33 #[inline]
34 fn make_visitor(&self, target: T) -> Self::Visitor {
35 Messages(self.0.make_visitor(target))
36 }
37}
38
39impl<V> Visit for Messages<V>
40where
41 V: Visit,
42{
43 #[inline]
44 fn record_f64(&mut self, field: &Field, value: f64) {
45 self.0.record_f64(field, value)
46 }
47
48 #[inline]
49 fn record_i64(&mut self, field: &Field, value: i64) {
50 self.0.record_i64(field, value)
51 }
52
53 #[inline]
54 fn record_u64(&mut self, field: &Field, value: u64) {
55 self.0.record_u64(field, value)
56 }
57
58 #[inline]
59 fn record_bool(&mut self, field: &Field, value: bool) {
60 self.0.record_bool(field, value)
61 }
62
63 fn record_str(&mut self, field: &Field, value: &str) {
65 if field.name() == "message" {
66 self.0.record_debug(field, &format_args!("{}", value))
67 } else {
68 self.0.record_str(field, value)
69 }
70 }
71
72 #[inline]
78 fn record_debug(&mut self, field: &Field, value: &dyn fmt::Debug) {
79 self.0.record_debug(field, value)
80 }
81}
82
83impl<V, O> VisitOutput<O> for Messages<V>
84where
85 V: VisitOutput<O>,
86{
87 #[inline]
88 fn finish(self) -> O {
89 self.0.finish()
90 }
91}
92
93feature! {
94 #![feature = "std"]
95 use super::VisitWrite;
96 use std::io;
97
98 impl<V> VisitWrite for Messages<V>
99 where
100 V: VisitWrite,
101 {
102 #[inline]
103 fn writer(&mut self) -> &mut dyn io::Write {
104 self.0.writer()
105 }
106 }
107}
108
109impl<V> VisitFmt for Messages<V>
110where
111 V: VisitFmt,
112{
113 #[inline]
114 fn writer(&mut self) -> &mut dyn fmt::Write {
115 self.0.writer()
116 }
117}