xrpl_api/types/transaction/variants/
payment.rs1use crate::{Amount, TransactionCommon};
2use enumflags2::BitFlags;
3use serde::{Deserialize, Serialize};
4use xrpl_types::PaymentFlags;
5
6#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
8#[serde(rename_all = "PascalCase")]
9pub struct PaymentTransaction {
10 #[serde(flatten)]
11 pub common: TransactionCommon,
12 #[serde(default)]
13 pub flags: BitFlags<PaymentFlags>,
14 pub amount: Amount,
15 pub destination: String,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub destination_tag: Option<u32>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub invoice_id: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub send_max: Option<Amount>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub deliver_min: Option<Amount>,
24}
25
26#[cfg(test)]
27mod test {
28 use crate::PaymentTransaction;
29
30 #[test]
31 fn test_payment_deserialize() {
32 let json = r#"
33{
34 "TransactionType" : "Payment",
35 "Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
36 "Destination" : "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
37 "Amount" : {
38 "currency" : "USD",
39 "value" : "1",
40 "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
41 },
42 "Fee": "12",
43 "Flags": 2147483648,
44 "Sequence": 2
45}
46 "#;
47
48 let _: PaymentTransaction = serde_json::from_str(json).unwrap();
49 }
50}