1use super::*;
3
4#[derive(Debug)]
5pub struct SerializeFieldMap<'a, T>(&'a T);
6
7pub trait AsMap: Sized + sealed::Sealed {
8 fn field_map(&self) -> SerializeFieldMap<'_, Self> {
9 SerializeFieldMap(self)
10 }
11}
12
13impl<'a> AsMap for Event<'a> {}
14impl<'a> AsMap for Attributes<'a> {}
15impl<'a> AsMap for Record<'a> {}
16
17impl<'a> Serialize for SerializeFieldMap<'a, Event<'_>> {
20 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21 where
22 S: Serializer,
23 {
24 let len = self.0.fields().count();
25 let serializer = serializer.serialize_map(Some(len))?;
26 let mut visitor = SerdeMapVisitor::new(serializer);
27 self.0.record(&mut visitor);
28 visitor.finish()
29 }
30}
31
32impl<'a> Serialize for SerializeFieldMap<'a, Attributes<'_>> {
33 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
34 where
35 S: Serializer,
36 {
37 let len = self.0.metadata().fields().len();
38 let serializer = serializer.serialize_map(Some(len))?;
39 let mut visitor = SerdeMapVisitor::new(serializer);
40 self.0.record(&mut visitor);
41 visitor.finish()
42 }
43}
44
45impl<'a> Serialize for SerializeFieldMap<'a, Record<'_>> {
46 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
47 where
48 S: Serializer,
49 {
50 let serializer = serializer.serialize_map(None)?;
51 let mut visitor = SerdeMapVisitor::new(serializer);
52 self.0.record(&mut visitor);
53 visitor.finish()
54 }
55}