1pub mod account_channels;
2pub mod account_currencies;
3pub mod account_info;
4pub mod account_lines;
5pub mod account_nfts;
6pub mod account_objects;
7pub mod account_offers;
8pub mod account_tx;
9pub mod amm_info;
10pub mod book_offers;
11pub mod channel_authorize;
12pub mod channel_verify;
13pub mod deposit_authorize;
14pub mod fee;
15pub mod gateway_balances;
16pub mod ledger;
17pub mod ledger_closed;
18pub mod ledger_current;
19pub mod ledger_data;
20pub mod ledger_entry;
21pub mod manifest;
22pub mod nft_buy_offers;
23pub mod nft_history;
24pub mod nft_info;
25pub mod nft_sell_offers;
26pub mod nfts_by_issuer;
27pub mod no_ripple_check;
28pub mod path_find;
29pub mod ping;
30pub mod random;
31pub mod ripple_path_find;
32pub mod server_info;
33pub mod server_state;
34pub mod submit;
35pub mod submit_multisigned;
36pub mod subscribe;
37pub mod transaction_entry;
38pub mod tx;
39pub mod unsubscribe;
40
41use alloc::{borrow::Cow, string::String};
42use derive_new::new;
43use serde::{Deserialize, Serialize};
44use serde_with::skip_serializing_none;
45use strum_macros::Display;
46
47#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize, Display)]
50#[strum(serialize_all = "snake_case")]
51#[serde(rename_all = "snake_case")]
52pub enum RequestMethod {
53 AccountChannels,
55 AccountCurrencies,
56 AccountInfo,
57 AccountLines,
58 AccountNfts,
59 AccountObjects,
60 AccountOffers,
61 AccountTx,
62 #[serde(rename = "amm_info")]
63 AMMInfo,
64 GatewayBalances,
65 NoRippleCheck,
66
67 Sign,
69 SignFor,
70 Submit,
71 SubmitMultisigned,
72 TransactionEntry,
73 Tx,
74
75 ChannelAuthorize,
77 ChannelVerify,
78
79 BookOffers,
81 DepositAuthorized,
82 #[serde(rename = "nft_buy_offers")]
83 NFTBuyOffers,
84 #[serde(rename = "nft_history")]
85 NFTHistory,
86 #[serde(rename = "nft_info")]
87 NFTInfo,
88 #[serde(rename = "nft_sell_offers")]
89 NFTSellOffers,
90 #[serde(rename = "nfts_by_issuer")]
91 NFTsByIssuer,
92 PathFind,
93 RipplePathFind,
94
95 Ledger,
97 LedgerClosed,
98 LedgerCurrent,
99 LedgerData,
100 LedgerEntry,
101
102 Subscribe,
104 Unsubscribe,
105
106 Fee,
108 Manifest,
109 ServerInfo,
110 ServerState,
111
112 Ping,
114 Random,
115}
116
117#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
118#[serde(untagged)]
119pub enum XRPLRequest<'a> {
120 AccountChannels(account_channels::AccountChannels<'a>),
121 AccountCurrencies(account_currencies::AccountCurrencies<'a>),
122 AccountInfo(account_info::AccountInfo<'a>),
123 AccountLines(account_lines::AccountLines<'a>),
124 AccountNfts(account_nfts::AccountNfts<'a>),
125 AccountObjects(account_objects::AccountObjects<'a>),
126 AccountOffers(account_offers::AccountOffers<'a>),
127 AccountTx(account_tx::AccountTx<'a>),
128 AMMInfo(amm_info::AMMInfo<'a>),
129 GatewayBalances(gateway_balances::GatewayBalances<'a>),
130 NoRippleCheck(no_ripple_check::NoRippleCheck<'a>),
131 Submit(submit::Submit<'a>),
132 SubmitMultisigned(submit_multisigned::SubmitMultisigned<'a>),
133 TransactionEntry(transaction_entry::TransactionEntry<'a>),
134 Tx(tx::Tx<'a>),
135 ChannelAuthorize(channel_authorize::ChannelAuthorize<'a>),
136 ChannelVerify(channel_verify::ChannelVerify<'a>),
137 BookOffers(book_offers::BookOffers<'a>),
138 DepositAuthorized(deposit_authorize::DepositAuthorized<'a>),
139 NFTBuyOffers(nft_buy_offers::NftBuyOffers<'a>),
140 NFTHistory(nft_history::NFTHistory<'a>),
141 NFTInfo(nft_info::NFTInfo<'a>),
142 NFTSellOffers(nft_sell_offers::NftSellOffers<'a>),
143 NFTsByIssuer(nfts_by_issuer::NFTsByIssuer<'a>),
144 PathFind(path_find::PathFind<'a>),
145 RipplePathFind(ripple_path_find::RipplePathFind<'a>),
146 Ledger(ledger::Ledger<'a>),
147 LedgerClosed(ledger_closed::LedgerClosed<'a>),
148 LedgerCurrent(ledger_current::LedgerCurrent<'a>),
149 LedgerData(ledger_data::LedgerData<'a>),
150 LedgerEntry(ledger_entry::LedgerEntry<'a>),
151 Subscribe(subscribe::Subscribe<'a>),
152 Unsubscribe(unsubscribe::Unsubscribe<'a>),
153 Fee(fee::Fee<'a>),
154 Manifest(manifest::Manifest<'a>),
155 ServerInfo(server_info::ServerInfo<'a>),
156 ServerState(server_state::ServerState<'a>),
157 Ping(ping::Ping<'a>),
158 Random(random::Random<'a>),
159}
160
161impl<'a> From<account_channels::AccountChannels<'a>> for XRPLRequest<'a> {
162 fn from(request: account_channels::AccountChannels<'a>) -> Self {
163 XRPLRequest::AccountChannels(request)
164 }
165}
166
167impl<'a> From<account_currencies::AccountCurrencies<'a>> for XRPLRequest<'a> {
168 fn from(request: account_currencies::AccountCurrencies<'a>) -> Self {
169 XRPLRequest::AccountCurrencies(request)
170 }
171}
172
173impl<'a> From<account_info::AccountInfo<'a>> for XRPLRequest<'a> {
174 fn from(request: account_info::AccountInfo<'a>) -> Self {
175 XRPLRequest::AccountInfo(request)
176 }
177}
178
179impl<'a> From<account_lines::AccountLines<'a>> for XRPLRequest<'a> {
180 fn from(request: account_lines::AccountLines<'a>) -> Self {
181 XRPLRequest::AccountLines(request)
182 }
183}
184
185impl<'a> From<account_nfts::AccountNfts<'a>> for XRPLRequest<'a> {
186 fn from(request: account_nfts::AccountNfts<'a>) -> Self {
187 XRPLRequest::AccountNfts(request)
188 }
189}
190
191impl<'a> From<account_objects::AccountObjects<'a>> for XRPLRequest<'a> {
192 fn from(request: account_objects::AccountObjects<'a>) -> Self {
193 XRPLRequest::AccountObjects(request)
194 }
195}
196
197impl<'a> From<account_offers::AccountOffers<'a>> for XRPLRequest<'a> {
198 fn from(request: account_offers::AccountOffers<'a>) -> Self {
199 XRPLRequest::AccountOffers(request)
200 }
201}
202
203impl<'a> From<account_tx::AccountTx<'a>> for XRPLRequest<'a> {
204 fn from(request: account_tx::AccountTx<'a>) -> Self {
205 XRPLRequest::AccountTx(request)
206 }
207}
208
209impl<'a> From<amm_info::AMMInfo<'a>> for XRPLRequest<'a> {
210 fn from(request: amm_info::AMMInfo<'a>) -> Self {
211 XRPLRequest::AMMInfo(request)
212 }
213}
214
215impl<'a> From<gateway_balances::GatewayBalances<'a>> for XRPLRequest<'a> {
216 fn from(request: gateway_balances::GatewayBalances<'a>) -> Self {
217 XRPLRequest::GatewayBalances(request)
218 }
219}
220
221impl<'a> From<no_ripple_check::NoRippleCheck<'a>> for XRPLRequest<'a> {
222 fn from(request: no_ripple_check::NoRippleCheck<'a>) -> Self {
223 XRPLRequest::NoRippleCheck(request)
224 }
225}
226
227impl<'a> From<submit::Submit<'a>> for XRPLRequest<'a> {
228 fn from(request: submit::Submit<'a>) -> Self {
229 XRPLRequest::Submit(request)
230 }
231}
232
233impl<'a> From<submit_multisigned::SubmitMultisigned<'a>> for XRPLRequest<'a> {
234 fn from(request: submit_multisigned::SubmitMultisigned<'a>) -> Self {
235 XRPLRequest::SubmitMultisigned(request)
236 }
237}
238
239impl<'a> From<transaction_entry::TransactionEntry<'a>> for XRPLRequest<'a> {
240 fn from(request: transaction_entry::TransactionEntry<'a>) -> Self {
241 XRPLRequest::TransactionEntry(request)
242 }
243}
244
245impl<'a> From<tx::Tx<'a>> for XRPLRequest<'a> {
246 fn from(request: tx::Tx<'a>) -> Self {
247 XRPLRequest::Tx(request)
248 }
249}
250
251impl<'a> From<channel_authorize::ChannelAuthorize<'a>> for XRPLRequest<'a> {
252 fn from(request: channel_authorize::ChannelAuthorize<'a>) -> Self {
253 XRPLRequest::ChannelAuthorize(request)
254 }
255}
256
257impl<'a> From<channel_verify::ChannelVerify<'a>> for XRPLRequest<'a> {
258 fn from(request: channel_verify::ChannelVerify<'a>) -> Self {
259 XRPLRequest::ChannelVerify(request)
260 }
261}
262
263impl<'a> From<book_offers::BookOffers<'a>> for XRPLRequest<'a> {
264 fn from(request: book_offers::BookOffers<'a>) -> Self {
265 XRPLRequest::BookOffers(request)
266 }
267}
268
269impl<'a> From<deposit_authorize::DepositAuthorized<'a>> for XRPLRequest<'a> {
270 fn from(request: deposit_authorize::DepositAuthorized<'a>) -> Self {
271 XRPLRequest::DepositAuthorized(request)
272 }
273}
274
275impl<'a> From<nft_buy_offers::NftBuyOffers<'a>> for XRPLRequest<'a> {
276 fn from(request: nft_buy_offers::NftBuyOffers<'a>) -> Self {
277 XRPLRequest::NFTBuyOffers(request)
278 }
279}
280
281impl<'a> From<nft_sell_offers::NftSellOffers<'a>> for XRPLRequest<'a> {
282 fn from(request: nft_sell_offers::NftSellOffers<'a>) -> Self {
283 XRPLRequest::NFTSellOffers(request)
284 }
285}
286
287impl<'a> From<path_find::PathFind<'a>> for XRPLRequest<'a> {
288 fn from(request: path_find::PathFind<'a>) -> Self {
289 XRPLRequest::PathFind(request)
290 }
291}
292
293impl<'a> From<ripple_path_find::RipplePathFind<'a>> for XRPLRequest<'a> {
294 fn from(request: ripple_path_find::RipplePathFind<'a>) -> Self {
295 XRPLRequest::RipplePathFind(request)
296 }
297}
298
299impl<'a> From<ledger::Ledger<'a>> for XRPLRequest<'a> {
300 fn from(request: ledger::Ledger<'a>) -> Self {
301 XRPLRequest::Ledger(request)
302 }
303}
304
305impl<'a> From<ledger_closed::LedgerClosed<'a>> for XRPLRequest<'a> {
306 fn from(request: ledger_closed::LedgerClosed<'a>) -> Self {
307 XRPLRequest::LedgerClosed(request)
308 }
309}
310
311impl<'a> From<ledger_current::LedgerCurrent<'a>> for XRPLRequest<'a> {
312 fn from(request: ledger_current::LedgerCurrent<'a>) -> Self {
313 XRPLRequest::LedgerCurrent(request)
314 }
315}
316
317impl<'a> From<ledger_data::LedgerData<'a>> for XRPLRequest<'a> {
318 fn from(request: ledger_data::LedgerData<'a>) -> Self {
319 XRPLRequest::LedgerData(request)
320 }
321}
322
323impl<'a> From<ledger_entry::LedgerEntry<'a>> for XRPLRequest<'a> {
324 fn from(request: ledger_entry::LedgerEntry<'a>) -> Self {
325 XRPLRequest::LedgerEntry(request)
326 }
327}
328
329impl<'a> From<subscribe::Subscribe<'a>> for XRPLRequest<'a> {
330 fn from(request: subscribe::Subscribe<'a>) -> Self {
331 XRPLRequest::Subscribe(request)
332 }
333}
334
335impl<'a> From<unsubscribe::Unsubscribe<'a>> for XRPLRequest<'a> {
336 fn from(request: unsubscribe::Unsubscribe<'a>) -> Self {
337 XRPLRequest::Unsubscribe(request)
338 }
339}
340
341impl<'a> From<fee::Fee<'a>> for XRPLRequest<'a> {
342 fn from(request: fee::Fee<'a>) -> Self {
343 XRPLRequest::Fee(request)
344 }
345}
346
347impl<'a> From<manifest::Manifest<'a>> for XRPLRequest<'a> {
348 fn from(request: manifest::Manifest<'a>) -> Self {
349 XRPLRequest::Manifest(request)
350 }
351}
352
353impl<'a> From<server_info::ServerInfo<'a>> for XRPLRequest<'a> {
354 fn from(request: server_info::ServerInfo<'a>) -> Self {
355 XRPLRequest::ServerInfo(request)
356 }
357}
358
359impl<'a> From<server_state::ServerState<'a>> for XRPLRequest<'a> {
360 fn from(request: server_state::ServerState<'a>) -> Self {
361 XRPLRequest::ServerState(request)
362 }
363}
364
365impl<'a> From<ping::Ping<'a>> for XRPLRequest<'a> {
366 fn from(request: ping::Ping<'a>) -> Self {
367 XRPLRequest::Ping(request)
368 }
369}
370
371impl<'a> From<random::Random<'a>> for XRPLRequest<'a> {
372 fn from(request: random::Random<'a>) -> Self {
373 XRPLRequest::Random(request)
374 }
375}
376
377impl<'a> Request<'a> for XRPLRequest<'a> {
378 fn get_common_fields(&self) -> &CommonFields<'a> {
379 match self {
380 XRPLRequest::AccountChannels(request) => request.get_common_fields(),
381 XRPLRequest::AccountCurrencies(request) => request.get_common_fields(),
382 XRPLRequest::AccountInfo(request) => request.get_common_fields(),
383 XRPLRequest::AccountLines(request) => request.get_common_fields(),
384 XRPLRequest::AccountNfts(request) => request.get_common_fields(),
385 XRPLRequest::AccountObjects(request) => request.get_common_fields(),
386 XRPLRequest::AccountOffers(request) => request.get_common_fields(),
387 XRPLRequest::AccountTx(request) => request.get_common_fields(),
388 XRPLRequest::AMMInfo(request) => request.get_common_fields(),
389 XRPLRequest::GatewayBalances(request) => request.get_common_fields(),
390 XRPLRequest::NoRippleCheck(request) => request.get_common_fields(),
391 XRPLRequest::Submit(request) => request.get_common_fields(),
392 XRPLRequest::SubmitMultisigned(request) => request.get_common_fields(),
393 XRPLRequest::TransactionEntry(request) => request.get_common_fields(),
394 XRPLRequest::Tx(request) => request.get_common_fields(),
395 XRPLRequest::ChannelAuthorize(request) => request.get_common_fields(),
396 XRPLRequest::ChannelVerify(request) => request.get_common_fields(),
397 XRPLRequest::BookOffers(request) => request.get_common_fields(),
398 XRPLRequest::DepositAuthorized(request) => request.get_common_fields(),
399 XRPLRequest::NFTBuyOffers(request) => request.get_common_fields(),
400 XRPLRequest::NFTHistory(request) => request.get_common_fields(),
401 XRPLRequest::NFTInfo(request) => request.get_common_fields(),
402 XRPLRequest::NFTSellOffers(request) => request.get_common_fields(),
403 XRPLRequest::NFTsByIssuer(request) => request.get_common_fields(),
404 XRPLRequest::PathFind(request) => request.get_common_fields(),
405 XRPLRequest::RipplePathFind(request) => request.get_common_fields(),
406 XRPLRequest::Ledger(request) => request.get_common_fields(),
407 XRPLRequest::LedgerClosed(request) => request.get_common_fields(),
408 XRPLRequest::LedgerCurrent(request) => request.get_common_fields(),
409 XRPLRequest::LedgerData(request) => request.get_common_fields(),
410 XRPLRequest::LedgerEntry(request) => request.get_common_fields(),
411 XRPLRequest::Subscribe(request) => request.get_common_fields(),
412 XRPLRequest::Unsubscribe(request) => request.get_common_fields(),
413 XRPLRequest::Fee(request) => request.get_common_fields(),
414 XRPLRequest::Manifest(request) => request.get_common_fields(),
415 XRPLRequest::ServerInfo(request) => request.get_common_fields(),
416 XRPLRequest::ServerState(request) => request.get_common_fields(),
417 XRPLRequest::Ping(request) => request.get_common_fields(),
418 XRPLRequest::Random(request) => request.get_common_fields(),
419 }
420 }
421
422 fn get_common_fields_mut(&mut self) -> &mut CommonFields<'a> {
423 match self {
424 XRPLRequest::AccountChannels(request) => request.get_common_fields_mut(),
425 XRPLRequest::AccountCurrencies(request) => request.get_common_fields_mut(),
426 XRPLRequest::AccountInfo(request) => request.get_common_fields_mut(),
427 XRPLRequest::AccountLines(request) => request.get_common_fields_mut(),
428 XRPLRequest::AccountNfts(request) => request.get_common_fields_mut(),
429 XRPLRequest::AccountObjects(request) => request.get_common_fields_mut(),
430 XRPLRequest::AccountOffers(request) => request.get_common_fields_mut(),
431 XRPLRequest::AccountTx(request) => request.get_common_fields_mut(),
432 XRPLRequest::AMMInfo(request) => request.get_common_fields_mut(),
433 XRPLRequest::GatewayBalances(request) => request.get_common_fields_mut(),
434 XRPLRequest::NoRippleCheck(request) => request.get_common_fields_mut(),
435 XRPLRequest::Submit(request) => request.get_common_fields_mut(),
436 XRPLRequest::SubmitMultisigned(request) => request.get_common_fields_mut(),
437 XRPLRequest::TransactionEntry(request) => request.get_common_fields_mut(),
438 XRPLRequest::Tx(request) => request.get_common_fields_mut(),
439 XRPLRequest::ChannelAuthorize(request) => request.get_common_fields_mut(),
440 XRPLRequest::ChannelVerify(request) => request.get_common_fields_mut(),
441 XRPLRequest::BookOffers(request) => request.get_common_fields_mut(),
442 XRPLRequest::DepositAuthorized(request) => request.get_common_fields_mut(),
443 XRPLRequest::NFTBuyOffers(request) => request.get_common_fields_mut(),
444 XRPLRequest::NFTHistory(request) => request.get_common_fields_mut(),
445 XRPLRequest::NFTInfo(request) => request.get_common_fields_mut(),
446 XRPLRequest::NFTSellOffers(request) => request.get_common_fields_mut(),
447 XRPLRequest::NFTsByIssuer(request) => request.get_common_fields_mut(),
448 XRPLRequest::PathFind(request) => request.get_common_fields_mut(),
449 XRPLRequest::RipplePathFind(request) => request.get_common_fields_mut(),
450 XRPLRequest::Ledger(request) => request.get_common_fields_mut(),
451 XRPLRequest::LedgerClosed(request) => request.get_common_fields_mut(),
452 XRPLRequest::LedgerCurrent(request) => request.get_common_fields_mut(),
453 XRPLRequest::LedgerData(request) => request.get_common_fields_mut(),
454 XRPLRequest::LedgerEntry(request) => request.get_common_fields_mut(),
455 XRPLRequest::Subscribe(request) => request.get_common_fields_mut(),
456 XRPLRequest::Unsubscribe(request) => request.get_common_fields_mut(),
457 XRPLRequest::Fee(request) => request.get_common_fields_mut(),
458 XRPLRequest::Manifest(request) => request.get_common_fields_mut(),
459 XRPLRequest::ServerInfo(request) => request.get_common_fields_mut(),
460 XRPLRequest::ServerState(request) => request.get_common_fields_mut(),
461 XRPLRequest::Ping(request) => request.get_common_fields_mut(),
462 XRPLRequest::Random(request) => request.get_common_fields_mut(),
463 }
464 }
465}
466
467#[skip_serializing_none]
469#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, new)]
470pub struct CommonFields<'a> {
471 pub command: RequestMethod,
473 pub id: Option<Cow<'a, str>>,
475}
476
477#[skip_serializing_none]
478#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, new)]
479pub struct LookupByLedgerRequest<'a> {
480 pub ledger_hash: Option<Cow<'a, str>>,
482 pub ledger_index: Option<LedgerIndex<'a>>,
485}
486
487#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
488pub struct LedgerSequenceMarker {
489 ledger: u32,
490 seq: u32,
491}
492
493#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
494#[serde(untagged)]
495pub enum Marker<'a> {
496 Int(u32),
497 Str(Cow<'a, str>),
498 Sequence(LedgerSequenceMarker),
499}
500
501impl From<u32> for Marker<'_> {
502 fn from(value: u32) -> Self {
503 Marker::Int(value)
504 }
505}
506
507impl<'a> From<&'a str> for Marker<'a> {
508 fn from(value: &'a str) -> Self {
509 Marker::Str(Cow::Borrowed(value))
510 }
511}
512
513impl<'a> From<Cow<'a, str>> for Marker<'a> {
514 fn from(value: Cow<'a, str>) -> Self {
515 Marker::Str(value)
516 }
517}
518
519impl From<String> for Marker<'_> {
520 fn from(value: String) -> Self {
521 Marker::Str(Cow::Owned(value))
522 }
523}
524
525#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
526#[serde(untagged)]
527pub enum LedgerIndex<'a> {
528 Int(u32),
529 Str(Cow<'a, str>),
530}
531
532impl From<u32> for LedgerIndex<'_> {
533 fn from(value: u32) -> Self {
534 LedgerIndex::Int(value)
535 }
536}
537
538impl<'a> From<&'a str> for LedgerIndex<'a> {
539 fn from(value: &'a str) -> Self {
540 LedgerIndex::Str(Cow::Borrowed(value))
541 }
542}
543
544impl<'a> From<Cow<'a, str>> for LedgerIndex<'a> {
545 fn from(value: Cow<'a, str>) -> Self {
546 LedgerIndex::Str(value)
547 }
548}
549
550impl From<String> for LedgerIndex<'_> {
551 fn from(value: String) -> Self {
552 LedgerIndex::Str(Cow::Owned(value))
553 }
554}
555
556pub trait Request<'a> {
559 fn get_common_fields(&self) -> &CommonFields<'a>;
560 fn get_common_fields_mut(&mut self) -> &mut CommonFields<'a>;
561}
562
563#[skip_serializing_none]
564#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
565#[serde(rename_all = "camelCase")]
566pub struct FundFaucet<'a> {
567 pub destination: Cow<'a, str>,
568 pub usage_context: Option<Cow<'a, str>>,
569 pub user_agent: Option<Cow<'a, str>>,
570}