feldera_types/
lib.rs

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