fluvio_controlplane_metadata/mirror/
spec.rs

1use std::fmt;
2
3use fluvio_protocol::{Encoder, Decoder};
4
5#[derive(Debug, Clone, PartialEq, Eq, Default, Encoder, Decoder)]
6#[cfg_attr(
7    feature = "use_serde",
8    derive(serde::Serialize, serde::Deserialize),
9    serde(rename_all = "camelCase")
10)]
11pub struct MirrorSpec {
12    pub mirror_type: MirrorType,
13    // TODO: we should add auth
14}
15
16impl MirrorSpec {
17    pub fn type_name(&self) -> &str {
18        match &self.mirror_type {
19            MirrorType::Remote(_) => "remote",
20            MirrorType::Home(_) => "home",
21        }
22    }
23}
24
25impl fmt::Display for MirrorSpec {
26    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
27        write!(f, "Mirror: {self:?}")
28    }
29}
30
31#[derive(Debug, Clone, Eq, PartialEq, Encoder, Decoder)]
32#[cfg_attr(feature = "use_serde", derive(serde::Serialize, serde::Deserialize))]
33pub enum MirrorType {
34    #[cfg_attr(feature = "use_serde", serde(rename = "remote"))]
35    #[fluvio(tag = 0)]
36    Remote(Remote),
37    #[cfg_attr(feature = "use_serde", serde(rename = "home"))]
38    #[fluvio(tag = 1)]
39    Home(Home),
40}
41
42impl fmt::Display for MirrorType {
43    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
44        let ts = match self {
45            MirrorType::Remote(remote) => format!("remote: {}", remote.id),
46            MirrorType::Home(home) => format!("home: {}", home.id),
47        };
48        write!(f, "{ts}")
49    }
50}
51
52impl Default for MirrorType {
53    fn default() -> Self {
54        Self::Remote(Remote::default())
55    }
56}
57
58#[derive(Debug, Clone, Default, Eq, PartialEq, Encoder, Decoder)]
59#[cfg_attr(
60    feature = "use_serde",
61    derive(serde::Serialize, serde::Deserialize),
62    serde(rename_all = "camelCase")
63)]
64pub struct Remote {
65    pub id: String,
66}
67
68#[derive(Debug, Clone, Default, Eq, PartialEq, Encoder, Decoder)]
69#[cfg_attr(
70    feature = "use_serde",
71    derive(serde::Serialize, serde::Deserialize),
72    serde(rename_all = "camelCase")
73)]
74pub struct Home {
75    pub id: String,
76    pub remote_id: String,
77    pub public_endpoint: String,
78    #[cfg_attr(feature = "use_serde", serde(skip_serializing_if = "Option::is_none"))]
79    pub client_tls: Option<ClientTls>,
80}
81
82#[derive(Clone, PartialEq, Eq, Default, Encoder, Decoder)]
83#[cfg_attr(
84    feature = "use_serde",
85    derive(serde::Serialize, serde::Deserialize),
86    serde(rename_all = "camelCase")
87)]
88pub struct ClientTls {
89    pub domain: String,
90    pub ca_cert: String,
91    pub client_cert: String,
92    pub client_key: String,
93}
94
95impl std::fmt::Debug for ClientTls {
96    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
97        write!(f, "ClientTls: {{ domain: {} }}", self.domain)
98    }
99}