vector/sinks/util/
processed_event.rs

1use serde::Serialize;
2use vector_lib::{
3    event::{EventFinalizers, Finalizable, LogEvent, MaybeAsLogMut},
4    ByteSizeOf, EstimatedJsonEncodedSizeOf,
5};
6use vector_lib::{
7    internal_event::TaggedEventsSent, json_size::JsonSize, request_metadata::GetEventCountTags,
8};
9
10/// An event alongside metadata from preprocessing. This is useful for sinks
11/// like Splunk HEC that process events prior to encoding.
12#[derive(Serialize)]
13pub struct ProcessedEvent<E, M> {
14    pub event: E,
15    pub metadata: M,
16}
17
18impl<E, M> MaybeAsLogMut for ProcessedEvent<E, M>
19where
20    E: MaybeAsLogMut,
21{
22    fn maybe_as_log_mut(&mut self) -> Option<&mut LogEvent> {
23        self.event.maybe_as_log_mut()
24    }
25}
26
27impl<E, M> Finalizable for ProcessedEvent<E, M>
28where
29    E: Finalizable,
30{
31    fn take_finalizers(&mut self) -> EventFinalizers {
32        self.event.take_finalizers()
33    }
34}
35
36impl<E, M> ByteSizeOf for ProcessedEvent<E, M>
37where
38    E: ByteSizeOf,
39    M: ByteSizeOf,
40{
41    fn allocated_bytes(&self) -> usize {
42        self.event.allocated_bytes() + self.metadata.allocated_bytes()
43    }
44}
45
46impl<E, M> EstimatedJsonEncodedSizeOf for ProcessedEvent<E, M>
47where
48    E: EstimatedJsonEncodedSizeOf,
49{
50    fn estimated_json_encoded_size_of(&self) -> JsonSize {
51        self.event.estimated_json_encoded_size_of()
52    }
53}
54
55impl<E, M> GetEventCountTags for ProcessedEvent<E, M>
56where
57    E: GetEventCountTags,
58{
59    fn get_tags(&self) -> TaggedEventsSent {
60        self.event.get_tags()
61    }
62}