vector_core/event/
merge_state.rs1use super::LogEvent;
2
3#[derive(Debug)]
9pub struct LogEventMergeState {
10 intermediate_merged_event: LogEvent,
12}
13
14impl LogEventMergeState {
15 pub fn new(first_partial_event: LogEvent) -> Self {
17 Self {
18 intermediate_merged_event: first_partial_event,
19 }
20 }
21
22 pub fn merge_in_next_event(&mut self, incoming: LogEvent, fields: &[impl AsRef<str>]) {
24 self.intermediate_merged_event.merge(incoming, fields);
25 }
26
27 pub fn merge_in_final_event(
30 mut self,
31 incoming: LogEvent,
32 fields: &[impl AsRef<str>],
33 ) -> LogEvent {
34 self.merge_in_next_event(incoming, fields);
35 self.intermediate_merged_event
36 }
37}
38
39#[cfg(test)]
40mod test {
41 use super::*;
42
43 fn log_event_with_message(message: &str) -> LogEvent {
44 LogEvent::from(message)
45 }
46
47 #[test]
48 fn log_event_merge_state_example() {
49 let fields = vec!["message".to_string()];
50
51 let mut state = LogEventMergeState::new(log_event_with_message("hel"));
52 state.merge_in_next_event(log_event_with_message("lo "), &fields);
53 let merged_event = state.merge_in_final_event(log_event_with_message("world"), &fields);
54
55 assert_eq!(
56 merged_event
57 .get("message")
58 .unwrap()
59 .coerce_to_bytes()
60 .as_ref(),
61 b"hello world"
62 );
63 }
64}