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