aptos_logger_link/
event.rs

1// Copyright (c) Aptos
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::{Metadata, Schema};
5use std::fmt;
6
7/// An individual structured logging event from a log line.  Includes the
8#[derive(Debug)]
9pub struct Event<'a> {
10    metadata: &'a Metadata,
11    /// The format message given from the log macros
12    message: Option<fmt::Arguments<'a>>,
13    keys_and_values: KeysAndValues<'a>,
14}
15
16impl<'a> Event<'a> {
17    fn new(
18        metadata: &'a Metadata,
19        message: Option<fmt::Arguments<'a>>,
20        keys_and_values: &'a [&'a dyn Schema],
21    ) -> Self {
22        Self {
23            metadata,
24            message,
25            keys_and_values: KeysAndValues(keys_and_values),
26        }
27    }
28
29    pub fn dispatch(
30        metadata: &'a Metadata,
31        message: Option<fmt::Arguments<'a>>,
32        keys_and_values: &'a [&'a dyn Schema],
33    ) {
34        let event = Event::new(metadata, message, keys_and_values);
35        crate::logger::dispatch(&event)
36    }
37
38    pub fn metadata(&self) -> &'a Metadata {
39        self.metadata
40    }
41
42    pub fn message(&self) -> Option<fmt::Arguments<'a>> {
43        self.message
44    }
45
46    pub fn keys_and_values(&self) -> &'a [&'a dyn Schema] {
47        self.keys_and_values.0
48    }
49}
50
51/// Keys and values given from the log `a = b` macros
52#[derive(Clone)]
53struct KeysAndValues<'a>(&'a [&'a dyn Schema]);
54
55impl<'a> fmt::Debug for KeysAndValues<'a> {
56    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
57        let mut visitor = f.debug_map();
58        for key_value in self.0 {
59            key_value.visit(&mut visitor);
60        }
61        visitor.finish()
62    }
63}