saluki_core/data_model/event/
mod.rs1use std::fmt;
4
5use bitmask_enum::bitmask;
6
7pub mod metric;
8use self::metric::Metric;
9
10pub mod eventd;
11use self::eventd::EventD;
12
13pub mod service_check;
14use self::service_check::ServiceCheck;
15
16pub mod log;
17use self::log::Log;
18
19#[bitmask(u8)]
24#[bitmask_config(vec_debug)]
25pub enum EventType {
26 Metric,
28
29 EventD,
31
32 ServiceCheck,
34
35 Log,
37}
38
39impl Default for EventType {
40 fn default() -> Self {
41 Self::none()
42 }
43}
44
45impl fmt::Display for EventType {
46 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
47 let mut types = Vec::new();
48
49 if self.contains(Self::Metric) {
50 types.push("Metric");
51 }
52
53 if self.contains(Self::EventD) {
54 types.push("DatadogEvent");
55 }
56
57 if self.contains(Self::ServiceCheck) {
58 types.push("ServiceCheck");
59 }
60
61 if self.contains(Self::Log) {
62 types.push("Log");
63 }
64
65 write!(f, "{}", types.join("|"))
66 }
67}
68
69#[derive(Clone, Debug, PartialEq)]
71pub enum Event {
72 Metric(Metric),
74
75 EventD(EventD),
77
78 ServiceCheck(ServiceCheck),
80
81 Log(Log),
83}
84
85impl Event {
86 pub fn event_type(&self) -> EventType {
88 match self {
89 Event::Metric(_) => EventType::Metric,
90 Event::EventD(_) => EventType::EventD,
91 Event::ServiceCheck(_) => EventType::ServiceCheck,
92 Event::Log(_) => EventType::Log,
93 }
94 }
95
96 pub fn try_into_metric(self) -> Option<Metric> {
100 match self {
101 Event::Metric(metric) => Some(metric),
102 _ => None,
103 }
104 }
105
106 pub fn try_as_metric(&self) -> Option<&Metric> {
110 match self {
111 Event::Metric(metric) => Some(metric),
112 _ => None,
113 }
114 }
115
116 pub fn try_as_metric_mut(&mut self) -> Option<&mut Metric> {
120 match self {
121 Event::Metric(metric) => Some(metric),
122 _ => None,
123 }
124 }
125
126 pub fn try_into_eventd(self) -> Option<EventD> {
130 match self {
131 Event::EventD(eventd) => Some(eventd),
132 _ => None,
133 }
134 }
135
136 pub fn try_into_service_check(self) -> Option<ServiceCheck> {
140 match self {
141 Event::ServiceCheck(service_check) => Some(service_check),
142 _ => None,
143 }
144 }
145
146 #[allow(unused)]
147 pub fn is_metric(&self) -> bool {
149 matches!(self, Event::Metric(_))
150 }
151
152 pub fn is_eventd(&self) -> bool {
154 matches!(self, Event::EventD(_))
155 }
156
157 pub fn is_service_check(&self) -> bool {
159 matches!(self, Event::ServiceCheck(_))
160 }
161
162 pub fn is_log(&self) -> bool {
164 matches!(self, Event::Log(_))
165 }
166}
167
168#[cfg(test)]
169mod tests {
170 use super::*;
171
172 #[test]
173 #[ignore = "only used to get struct sizes for core event data types"]
174 fn sizes() {
175 println!("Event: {} bytes", std::mem::size_of::<Event>());
176 println!("Metric: {} bytes", std::mem::size_of::<Metric>());
177 println!(" Context: {} bytes", std::mem::size_of::<saluki_context::Context>());
178 println!(
179 " MetricValues: {} bytes",
180 std::mem::size_of::<super::metric::MetricValues>()
181 );
182 println!(
183 " MetricMetadata: {} bytes",
184 std::mem::size_of::<super::metric::MetricMetadata>()
185 );
186 println!("EventD: {} bytes", std::mem::size_of::<EventD>());
187 println!("ServiceCheck: {} bytes", std::mem::size_of::<ServiceCheck>());
188 println!("Log: {} bytes", std::mem::size_of::<Log>());
189 }
190}