fluvio_controlplane_metadata/mirror/
spec.rs1use 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 }
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}