1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4#[cfg_attr(feature = "alloc", derive(Default))]
49#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
51#[cfg_attr(
52 all(feature = "serde", feature = "alloc"),
53 derive(serde::Serialize, serde::Deserialize),
54 serde(rename_all = "snake_case")
55)]
56#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
57#[repr(i32)]
58pub enum MessageType {
59 #[cfg_attr(feature = "alloc", default)]
60 ErrorMsg = 0,
61 Auth = 2,
62 DontHave = 3,
63 Peers = 5,
64 GetTxSet = 6,
65 TxSet = 7,
66 GeneralizedTxSet = 17,
67 Transaction = 8,
68 GetScpQuorumset = 9,
69 ScpQuorumset = 10,
70 ScpMessage = 11,
71 GetScpState = 12,
72 Hello = 13,
73 SendMore = 16,
74 SendMoreExtended = 20,
75 FloodAdvert = 18,
76 FloodDemand = 19,
77 TimeSlicedSurveyRequest = 21,
78 TimeSlicedSurveyResponse = 22,
79 TimeSlicedSurveyStartCollecting = 23,
80 TimeSlicedSurveyStopCollecting = 24,
81}
82
83impl MessageType {
84 const _VARIANTS: &[MessageType] = &[
85 MessageType::ErrorMsg,
86 MessageType::Auth,
87 MessageType::DontHave,
88 MessageType::Peers,
89 MessageType::GetTxSet,
90 MessageType::TxSet,
91 MessageType::GeneralizedTxSet,
92 MessageType::Transaction,
93 MessageType::GetScpQuorumset,
94 MessageType::ScpQuorumset,
95 MessageType::ScpMessage,
96 MessageType::GetScpState,
97 MessageType::Hello,
98 MessageType::SendMore,
99 MessageType::SendMoreExtended,
100 MessageType::FloodAdvert,
101 MessageType::FloodDemand,
102 MessageType::TimeSlicedSurveyRequest,
103 MessageType::TimeSlicedSurveyResponse,
104 MessageType::TimeSlicedSurveyStartCollecting,
105 MessageType::TimeSlicedSurveyStopCollecting,
106 ];
107 pub const VARIANTS: [MessageType; Self::_VARIANTS.len()] = {
108 let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
109 let mut i = 1;
110 while i < Self::_VARIANTS.len() {
111 arr[i] = Self::_VARIANTS[i];
112 i += 1;
113 }
114 arr
115 };
116 const _VARIANTS_STR: &[&str] = &[
117 "ErrorMsg",
118 "Auth",
119 "DontHave",
120 "Peers",
121 "GetTxSet",
122 "TxSet",
123 "GeneralizedTxSet",
124 "Transaction",
125 "GetScpQuorumset",
126 "ScpQuorumset",
127 "ScpMessage",
128 "GetScpState",
129 "Hello",
130 "SendMore",
131 "SendMoreExtended",
132 "FloodAdvert",
133 "FloodDemand",
134 "TimeSlicedSurveyRequest",
135 "TimeSlicedSurveyResponse",
136 "TimeSlicedSurveyStartCollecting",
137 "TimeSlicedSurveyStopCollecting",
138 ];
139 pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
140 let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
141 let mut i = 1;
142 while i < Self::_VARIANTS_STR.len() {
143 arr[i] = Self::_VARIANTS_STR[i];
144 i += 1;
145 }
146 arr
147 };
148
149 #[must_use]
150 pub const fn name(&self) -> &'static str {
151 match self {
152 Self::ErrorMsg => "ErrorMsg",
153 Self::Auth => "Auth",
154 Self::DontHave => "DontHave",
155 Self::Peers => "Peers",
156 Self::GetTxSet => "GetTxSet",
157 Self::TxSet => "TxSet",
158 Self::GeneralizedTxSet => "GeneralizedTxSet",
159 Self::Transaction => "Transaction",
160 Self::GetScpQuorumset => "GetScpQuorumset",
161 Self::ScpQuorumset => "ScpQuorumset",
162 Self::ScpMessage => "ScpMessage",
163 Self::GetScpState => "GetScpState",
164 Self::Hello => "Hello",
165 Self::SendMore => "SendMore",
166 Self::SendMoreExtended => "SendMoreExtended",
167 Self::FloodAdvert => "FloodAdvert",
168 Self::FloodDemand => "FloodDemand",
169 Self::TimeSlicedSurveyRequest => "TimeSlicedSurveyRequest",
170 Self::TimeSlicedSurveyResponse => "TimeSlicedSurveyResponse",
171 Self::TimeSlicedSurveyStartCollecting => "TimeSlicedSurveyStartCollecting",
172 Self::TimeSlicedSurveyStopCollecting => "TimeSlicedSurveyStopCollecting",
173 }
174 }
175
176 #[must_use]
177 pub const fn variants() -> [MessageType; Self::_VARIANTS.len()] {
178 Self::VARIANTS
179 }
180}
181
182impl Name for MessageType {
183 #[must_use]
184 fn name(&self) -> &'static str {
185 Self::name(self)
186 }
187}
188
189impl Variants<MessageType> for MessageType {
190 fn variants() -> slice::Iter<'static, MessageType> {
191 Self::VARIANTS.iter()
192 }
193}
194
195impl Enum for MessageType {}
196
197impl fmt::Display for MessageType {
198 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
199 f.write_str(self.name())
200 }
201}
202
203impl TryFrom<i32> for MessageType {
204 type Error = Error;
205
206 fn try_from(i: i32) -> Result<Self, Error> {
207 let e = match i {
208 0 => MessageType::ErrorMsg,
209 2 => MessageType::Auth,
210 3 => MessageType::DontHave,
211 5 => MessageType::Peers,
212 6 => MessageType::GetTxSet,
213 7 => MessageType::TxSet,
214 17 => MessageType::GeneralizedTxSet,
215 8 => MessageType::Transaction,
216 9 => MessageType::GetScpQuorumset,
217 10 => MessageType::ScpQuorumset,
218 11 => MessageType::ScpMessage,
219 12 => MessageType::GetScpState,
220 13 => MessageType::Hello,
221 16 => MessageType::SendMore,
222 20 => MessageType::SendMoreExtended,
223 18 => MessageType::FloodAdvert,
224 19 => MessageType::FloodDemand,
225 21 => MessageType::TimeSlicedSurveyRequest,
226 22 => MessageType::TimeSlicedSurveyResponse,
227 23 => MessageType::TimeSlicedSurveyStartCollecting,
228 24 => MessageType::TimeSlicedSurveyStopCollecting,
229 #[allow(unreachable_patterns)]
230 _ => return Err(Error::Invalid),
231 };
232 Ok(e)
233 }
234}
235
236impl From<MessageType> for i32 {
237 #[must_use]
238 fn from(e: MessageType) -> Self {
239 e as Self
240 }
241}
242
243impl ReadXdr for MessageType {
244 #[cfg(feature = "std")]
245 fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
246 r.with_limited_depth(|r| {
247 let e = i32::read_xdr(r)?;
248 let v: Self = e.try_into()?;
249 Ok(v)
250 })
251 }
252}
253
254impl WriteXdr for MessageType {
255 #[cfg(feature = "std")]
256 fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
257 w.with_limited_depth(|w| {
258 let i: i32 = (*self).into();
259 i.write_xdr(w)
260 })
261 }
262}