Skip to main content

stellar_xdr/generated/
message_type.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// MessageType is an XDR Enum defined as:
5///
6/// ```text
7/// enum MessageType
8/// {
9///     ERROR_MSG = 0,
10///     AUTH = 2,
11///     DONT_HAVE = 3,
12///     // GET_PEERS (4) is deprecated
13///
14///     PEERS = 5,
15///
16///     GET_TX_SET = 6, // gets a particular txset by hash
17///     TX_SET = 7,
18///     GENERALIZED_TX_SET = 17,
19///
20///     TRANSACTION = 8, // pass on a tx you have heard about
21///
22///     // SCP
23///     GET_SCP_QUORUMSET = 9,
24///     SCP_QUORUMSET = 10,
25///     SCP_MESSAGE = 11,
26///     GET_SCP_STATE = 12,
27///
28///     // new messages
29///     HELLO = 13,
30///
31///     // SURVEY_REQUEST (14) removed and replaced by TIME_SLICED_SURVEY_REQUEST
32///     // SURVEY_RESPONSE (15) removed and replaced by TIME_SLICED_SURVEY_RESPONSE
33///
34///     SEND_MORE = 16,
35///     SEND_MORE_EXTENDED = 20,
36///
37///     FLOOD_ADVERT = 18,
38///     FLOOD_DEMAND = 19,
39///
40///     TIME_SLICED_SURVEY_REQUEST = 21,
41///     TIME_SLICED_SURVEY_RESPONSE = 22,
42///     TIME_SLICED_SURVEY_START_COLLECTING = 23,
43///     TIME_SLICED_SURVEY_STOP_COLLECTING = 24
44/// };
45/// ```
46///
47// enum
48#[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}