fluvio_controlplane_metadata/topic/
deduplication.rs

1use 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}