xrpl_api/types/transaction/variants/
payment.rs

1use crate::{Amount, TransactionCommon};
2use enumflags2::BitFlags;
3use serde::{Deserialize, Serialize};
4use xrpl_types::PaymentFlags;
5
6/// An `Payment` transaction <https://xrpl.org/payment.html>
7#[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}