Skip to main content

kuberic_core/grpc/
convert.rs

1use crate::proto;
2use crate::types::{
3    Epoch, OpenMode, ReplicaInfo, ReplicaSetConfig, ReplicaSetQuorumMode, ReplicaStatus, Role,
4};
5
6// --- Epoch ---
7
8impl From<Epoch> for proto::EpochProto {
9    fn from(e: Epoch) -> Self {
10        proto::EpochProto {
11            data_loss_number: e.data_loss_number,
12            configuration_number: e.configuration_number,
13        }
14    }
15}
16
17impl From<proto::EpochProto> for Epoch {
18    fn from(e: proto::EpochProto) -> Self {
19        Epoch::new(e.data_loss_number, e.configuration_number)
20    }
21}
22
23// --- Role ---
24
25impl From<Role> for proto::RoleProto {
26    fn from(r: Role) -> Self {
27        match r {
28            Role::None => proto::RoleProto::RoleNone,
29            Role::Primary => proto::RoleProto::RolePrimary,
30            Role::ActiveSecondary => proto::RoleProto::RoleActiveSecondary,
31            Role::IdleSecondary => proto::RoleProto::RoleIdleSecondary,
32        }
33    }
34}
35
36impl From<proto::RoleProto> for Role {
37    fn from(r: proto::RoleProto) -> Self {
38        match r {
39            proto::RoleProto::RoleNone => Role::None,
40            proto::RoleProto::RolePrimary => Role::Primary,
41            proto::RoleProto::RoleActiveSecondary => Role::ActiveSecondary,
42            proto::RoleProto::RoleIdleSecondary => Role::IdleSecondary,
43        }
44    }
45}
46
47impl From<i32> for Role {
48    fn from(v: i32) -> Self {
49        proto::RoleProto::try_from(v)
50            .unwrap_or(proto::RoleProto::RoleNone)
51            .into()
52    }
53}
54
55// --- OpenMode ---
56
57impl From<OpenMode> for proto::OpenModeProto {
58    fn from(m: OpenMode) -> Self {
59        match m {
60            OpenMode::New => proto::OpenModeProto::OpenNew,
61            OpenMode::Existing => proto::OpenModeProto::OpenExisting,
62        }
63    }
64}
65
66impl From<proto::OpenModeProto> for OpenMode {
67    fn from(m: proto::OpenModeProto) -> Self {
68        match m {
69            proto::OpenModeProto::OpenNew => OpenMode::New,
70            proto::OpenModeProto::OpenExisting => OpenMode::Existing,
71        }
72    }
73}
74
75impl From<i32> for OpenMode {
76    fn from(v: i32) -> Self {
77        proto::OpenModeProto::try_from(v)
78            .unwrap_or(proto::OpenModeProto::OpenNew)
79            .into()
80    }
81}
82
83// --- QuorumMode ---
84
85impl From<ReplicaSetQuorumMode> for proto::QuorumModeProto {
86    fn from(m: ReplicaSetQuorumMode) -> Self {
87        match m {
88            ReplicaSetQuorumMode::All => proto::QuorumModeProto::QuorumAll,
89            ReplicaSetQuorumMode::Write => proto::QuorumModeProto::QuorumWrite,
90        }
91    }
92}
93
94impl From<proto::QuorumModeProto> for ReplicaSetQuorumMode {
95    fn from(m: proto::QuorumModeProto) -> Self {
96        match m {
97            proto::QuorumModeProto::QuorumAll => ReplicaSetQuorumMode::All,
98            proto::QuorumModeProto::QuorumWrite => ReplicaSetQuorumMode::Write,
99        }
100    }
101}
102
103impl From<i32> for ReplicaSetQuorumMode {
104    fn from(v: i32) -> Self {
105        proto::QuorumModeProto::try_from(v)
106            .unwrap_or(proto::QuorumModeProto::QuorumAll)
107            .into()
108    }
109}
110
111// --- ReplicaInfo ---
112
113impl From<ReplicaInfo> for proto::ReplicaInfoProto {
114    fn from(r: ReplicaInfo) -> Self {
115        proto::ReplicaInfoProto {
116            id: r.id,
117            role: proto::RoleProto::from(r.role) as i32,
118            status: match r.status {
119                ReplicaStatus::Up => proto::ReplicaStatusProto::StatusUp as i32,
120                ReplicaStatus::Down => proto::ReplicaStatusProto::StatusDown as i32,
121            },
122            replicator_address: r.replicator_address,
123            current_progress: r.current_progress,
124            catch_up_capability: r.catch_up_capability,
125            must_catch_up: r.must_catch_up,
126        }
127    }
128}
129
130impl From<proto::ReplicaInfoProto> for ReplicaInfo {
131    fn from(r: proto::ReplicaInfoProto) -> Self {
132        ReplicaInfo {
133            id: r.id,
134            role: Role::from(r.role),
135            status: if r.status == proto::ReplicaStatusProto::StatusUp as i32 {
136                ReplicaStatus::Up
137            } else {
138                ReplicaStatus::Down
139            },
140            replicator_address: r.replicator_address,
141            current_progress: r.current_progress,
142            catch_up_capability: r.catch_up_capability,
143            must_catch_up: r.must_catch_up,
144        }
145    }
146}
147
148// --- ReplicaSetConfig ---
149
150impl From<ReplicaSetConfig> for proto::ReplicaSetConfigProto {
151    fn from(c: ReplicaSetConfig) -> Self {
152        proto::ReplicaSetConfigProto {
153            members: c.members.into_iter().map(|r| r.into()).collect(),
154            write_quorum: c.write_quorum,
155        }
156    }
157}
158
159impl From<proto::ReplicaSetConfigProto> for ReplicaSetConfig {
160    fn from(c: proto::ReplicaSetConfigProto) -> Self {
161        ReplicaSetConfig {
162            members: c.members.into_iter().map(|r| r.into()).collect(),
163            write_quorum: c.write_quorum,
164        }
165    }
166}