fluvio_controlplane_metadata/topic/
deduplication.rs1use std::{time::Duration, collections::BTreeMap};
2
3use derive_builder::Builder;
4use fluvio_protocol::{Encoder, Decoder};
5
6#[derive(Debug, Default, Builder, Clone, PartialEq, Eq, Encoder, Decoder)]
7#[cfg_attr(
8 feature = "use_serde",
9 derive(serde::Serialize, serde::Deserialize),
10 serde(rename_all = "kebab-case")
11)]
12pub struct Deduplication {
13 pub bounds: Bounds,
14 pub filter: Filter,
15}
16
17#[derive(Debug, Default, Builder, Clone, PartialEq, Eq, Encoder, Decoder)]
18#[cfg_attr(
19 feature = "use_serde",
20 derive(serde::Serialize, serde::Deserialize),
21 serde(rename_all = "kebab-case")
22)]
23pub struct Bounds {
24 #[cfg_attr(feature = "use_serde", serde(default, skip_serializing_if = "is_zero"))]
25 pub count: u64,
26 #[cfg_attr(
27 feature = "use_serde",
28 serde(
29 default,
30 skip_serializing_if = "Option::is_none",
31 with = "humantime_serde"
32 )
33 )]
34 pub age: Option<Duration>,
35}
36
37#[derive(Debug, Default, Builder, Clone, PartialEq, Eq, Encoder, Decoder)]
38#[cfg_attr(
39 feature = "use_serde",
40 derive(serde::Serialize, serde::Deserialize),
41 serde(rename_all = "kebab-case")
42)]
43pub struct Filter {
44 pub transform: Transform,
45}
46
47#[derive(Debug, Default, Builder, Clone, PartialEq, Eq, Encoder, Decoder)]
48#[cfg_attr(
49 feature = "use_serde",
50 derive(serde::Serialize, serde::Deserialize),
51 serde(rename_all = "kebab-case")
52)]
53pub struct Transform {
54 pub uses: String,
55 #[cfg_attr(
56 feature = "use_serde",
57 serde(default, skip_serializing_if = "BTreeMap::is_empty")
58 )]
59 pub with: BTreeMap<String, String>,
60}
61
62#[cfg(feature = "use_serde")]
63fn is_zero(val: &u64) -> bool {
64 *val == 0
65}