vector/api/schema/events/
output.rs1use async_graphql::{Object, Union};
2use vector_lib::tap::{controller::TapPayload, notification::Notification};
3
4use crate::api::schema::events::{log::Log, metric::Metric, trace::Trace};
5
6#[derive(Debug, Clone)]
14pub struct EventNotification {
15 pub notification: Notification,
16}
17
18#[Object]
19impl EventNotification {
21 async fn notification(&self) -> &Notification {
23 &self.notification
24 }
25
26 async fn message(&self) -> &str {
28 self.notification.as_str()
29 }
30}
31
32#[derive(Union, Debug, Clone)]
33#[allow(clippy::large_enum_variant)]
34pub enum OutputEventsPayload {
36 Log(Log),
38
39 Metric(Metric),
41
42 Notification(EventNotification),
44
45 Trace(Trace),
47}
48
49pub(crate) fn from_tap_payload_to_output_events(t: TapPayload) -> Vec<OutputEventsPayload> {
51 match t {
52 TapPayload::Log(output, log_array) => log_array
53 .into_iter()
54 .map(|log| OutputEventsPayload::Log(Log::new(output.clone(), log)))
55 .collect(),
56 TapPayload::Metric(output, metric_array) => metric_array
57 .into_iter()
58 .map(|metric| OutputEventsPayload::Metric(Metric::new(output.clone(), metric)))
59 .collect(),
60 TapPayload::Notification(notification) => {
61 vec![OutputEventsPayload::Notification(EventNotification {
62 notification,
63 })]
64 }
65 TapPayload::Trace(output, trace_array) => trace_array
66 .into_iter()
67 .map(|trace| OutputEventsPayload::Trace(Trace::new(output.clone(), trace)))
68 .collect(),
69 }
70}