feldera_types/
lib.rs

1pub mod adapter_stats;
2pub mod checkpoint;
3pub mod completion_token;
4pub mod config;
5pub mod constants;
6pub mod error;
7pub mod format;
8pub mod pipeline_diff;
9pub mod program_schema;
10pub mod query;
11pub mod query_params;
12pub mod runtime_status;
13pub mod secret_ref;
14pub mod secret_resolver;
15pub mod serde_with_context;
16pub mod suspend;
17pub mod time_series;
18pub mod transaction;
19pub mod transport;
20
21mod serde_via_value {
22    use serde::{
23        Deserialize, Deserializer, Serialize, Serializer,
24        de::{DeserializeOwned, Error},
25        ser::Error as _,
26    };
27
28    /// Use this as a serde deserialization function to work around
29    /// [`serde_json` issues] with nested `f64`.  It works in two steps, first
30    /// deserializing a `serde_json::Value` from `deserializer`, then
31    /// deserializing `T` from that `serde_json::Value`.
32    ///
33    /// Use this and `serialize` as serde de/serialization functions to work
34    /// around [`serde_yaml` issues] deserializing an enum variant with a
35    /// payload that is enclosed directly or indirectly within a flattened
36    /// struct.
37    ///
38    /// [`serde_json` issues]: https://github.com/serde-rs/json/issues/1157
39    /// [`serde_yaml` issues]: https://github.com/dtolnay/serde-yaml/issues/395
40    pub fn deserialize<'de, D, T>(deserializer: D) -> Result<T, D::Error>
41    where
42        D: Deserializer<'de>,
43        T: DeserializeOwned,
44    {
45        serde_json::from_value(serde_json::Value::deserialize(deserializer)?)
46            .map_err(D::Error::custom)
47    }
48
49    pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
50    where
51        T: Serialize,
52        S: Serializer,
53    {
54        serde_json::to_value(value)
55            .map_err(S::Error::custom)?
56            .serialize(serializer)
57    }
58}