falco_event_serde/ser/mod.rs
1//! Serialization support
2//!
3//! This module provides serialization support for Falco events in the form of an [`Event`]
4//! wrapper struct. A reference to any [`falco_event::events::Event`] can be converted into this
5//! struct, which implements [`serde::Serialize`].
6mod field;
7mod payload;
8
9use serde::Serialize;
10
11/// A wrapper struct for Falco events that implements `Serialize`.
12///
13/// # Example
14/// ```ignore
15/// // Take an arbitrary Falco event
16/// let event: falco_event_schema::events::Event<falco_event_schema::events::types::AnyEvent> = todo!();
17///
18/// // Wrap a reference to it for serialization
19/// let serializable_event = falco_event_serde::ser::Event::from(&event);
20///
21/// // Serialize the event to a JSON string
22/// let json = serde_json::to_string(&serializable_event).unwrap();
23/// ```
24#[derive(Serialize)]
25pub struct Event<'a, 'ser> {
26 ts: u64,
27 tid: i64,
28 #[serde(flatten)]
29 event: payload::AnyEvent<'a, 'ser>,
30}
31
32impl<'a, 'ser, T> From<&'ser falco_event::events::Event<T>> for Event<'a, 'ser>
33where
34 payload::AnyEvent<'a, 'ser>: From<&'ser T>,
35{
36 fn from(value: &'ser falco_event::events::Event<T>) -> Self {
37 Self {
38 ts: value.metadata.ts,
39 tid: value.metadata.tid,
40 event: payload::AnyEvent::from(&value.params),
41 }
42 }
43}