1use crate::{Metadata, Schema};
9use std::fmt;
10
11#[derive(Debug)]
13pub struct Event<'a> {
14 metadata: &'a Metadata,
15 message: Option<fmt::Arguments<'a>>,
17 keys_and_values: KeysAndValues<'a>,
18}
19
20impl<'a> Event<'a> {
21 fn new(
22 metadata: &'a Metadata, message: Option<fmt::Arguments<'a>>,
23 keys_and_values: &'a [&'a dyn Schema],
24 ) -> Self {
25 Self {
26 metadata,
27 message,
28 keys_and_values: KeysAndValues(keys_and_values),
29 }
30 }
31
32 pub fn dispatch(
33 metadata: &'a Metadata, message: Option<fmt::Arguments<'a>>,
34 keys_and_values: &'a [&'a dyn Schema],
35 ) {
36 let event = Event::new(metadata, message, keys_and_values);
37 crate::logger::dispatch(&event)
38 }
39
40 pub fn metadata(&self) -> &'a Metadata { &self.metadata }
41
42 pub fn message(&self) -> Option<fmt::Arguments<'a>> { self.message }
43
44 pub fn keys_and_values(&self) -> &'a [&'a dyn Schema] {
45 &self.keys_and_values.0
46 }
47}
48
49#[derive(Clone)]
51struct KeysAndValues<'a>(&'a [&'a dyn Schema]);
52
53impl<'a> fmt::Debug for KeysAndValues<'a> {
54 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
55 let mut visitor = f.debug_map();
56 for key_value in self.0 {
57 key_value.visit(&mut visitor);
58 }
59 visitor.finish()
60 }
61}