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}