falco_event_serde 0.5.1

Serde support for falco_event types
Documentation
use crate::de::repr::{Repr, TaggedRepr};
use serde::{Deserialize, Deserializer};
use std::marker::PhantomData;

falco_event_schema::derive_deftly_for_dynamic_params! {
    ${define INFERRED_GENS {
        ${if tgens { '_ }}
    }}

    ${define STATIC_GENS {
        ${if tgens { 'static }}
    }}

    impl<'de> Deserialize<'de> for TaggedRepr<falco_event_schema::fields::types::$tname<$INFERRED_GENS>> {
        fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {

            #[derive(Deserialize)]
            enum Param<$tgens> {
                $(
                    ${vdefbody $vname $(TaggedRepr<$ftype>)}
                )
            }

            let val: Param<$STATIC_GENS> = Deserialize::deserialize(deserializer)?;

            let repr = match val {
                $(Param::$vname(f_0) => {
                    if let Repr::Static(repr) = f_0.repr {
                        Repr::Dynamic(falco_event_schema::ffi::$vname as u8, repr)
                    } else {
                        unimplemented!()
                    }
                })
            };

            Ok(Self {
                repr,
                tag: PhantomData,
            })
        }
    }
}