feat(events): add type info to outgoing requests & maintain structural & PII type info (#2956)

Co-authored-by: Prasunna Soppa <prasunna.soppa@juspay.in>
This commit is contained in:
Sampras Lopes
2023-12-13 11:26:03 +05:30
committed by GitHub
parent 3f4167dbd4
commit 6e82b0bd74
93 changed files with 1496 additions and 2555 deletions

View File

@ -2,6 +2,7 @@
//! Serde-related.
//!
pub use erased_serde::Serialize as ErasedSerialize;
pub use serde::{de, ser, Deserialize, Serialize, Serializer};
use serde_json::{value::Serializer as JsonValueSerializer, Value};
@ -99,20 +100,32 @@ pub fn masked_serialize<T: Serialize>(value: &T) -> Result<Value, serde_json::Er
/// like &dyn Serialize or boxed trait objects like Box<dyn Serialize> because of Rust's "object safety" rules.
/// In particular, the trait contains generic methods which cannot be made into a trait object.
/// In this case we remove the generic for assuming the serialization to be of 2 types only raw json or masked json
pub trait ErasedMaskSerialize {
pub trait ErasedMaskSerialize: ErasedSerialize {
/// Masked serialization.
fn masked_serialize(&self) -> Result<Value, serde_json::Error>;
/// Normal serialization.
fn raw_serialize(&self) -> Result<Value, serde_json::Error>;
}
impl<T: Serialize> ErasedMaskSerialize for T {
impl<T: Serialize + ErasedSerialize> ErasedMaskSerialize for T {
fn masked_serialize(&self) -> Result<Value, serde_json::Error> {
masked_serialize(self)
}
}
fn raw_serialize(&self) -> Result<Value, serde_json::Error> {
serde_json::to_value(self)
impl<'a> Serialize for dyn ErasedMaskSerialize + 'a {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
erased_serde::serialize(self, serializer)
}
}
impl<'a> Serialize for dyn ErasedMaskSerialize + 'a + Send {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
erased_serde::serialize(self, serializer)
}
}