1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//! The fee command reports the current state of the open-ledger requirements
//! for the transaction cost.
//!
//! <https://xrpl.org/fee.html>

use crate::Request;
use serde::{Deserialize, Serialize};

#[derive(Default, Debug, Clone, Serialize)]
pub struct FeeRequest {}

impl Request for FeeRequest {
    type Response = FeeResponse;

    fn method(&self) -> String {
        "fee".to_owned()
    }
}

impl FeeRequest {
    pub fn new() -> Self {
        Self::default()
    }
}

/// Various information about the transaction cost (the Fee field of a transaction),
/// in drops of XRP.
#[derive(Debug, Deserialize)]
pub struct Drops {
    /// The transaction cost required for a reference transaction to be included
    /// in a ledger under minimum load, represented in drops of XRP.
    pub base_fee: String,
    /// An approximation of the median transaction cost among transactions included
    /// in the previous validated ledger, represented in drops of XRP.
    pub median_fee: String,
    /// The minimum transaction cost for a reference transaction to be queued for
    /// a later ledger, represented in drops of XRP. If greater than base_fee,
    /// the transaction queue is full.
    pub minimum_fee: String,
    /// The minimum transaction cost that a reference transaction must pay to be
    /// included in the current open ledger, represented in drops of XRP.
    pub open_ledger_fee: String,
}

/// Various information about the transaction cost, in fee levels. The ratio
/// in fee levels applies to any transaction relative to the minimum cost of that
/// particular transaction.
#[derive(Debug, Deserialize)]
pub struct Levels {
    /// The median transaction cost among transactions in the previous validated
    /// ledger, represented in fee levels.
    pub median_level: String,
    /// The minimum transaction cost required to be queued for a future ledger,
    /// represented in fee levels.
    pub minimum_level: String,
    /// The minimum transaction cost required to be included in the current open
    /// ledger, represented in fee levels.
    pub open_ledger_level: String,
    /// The equivalent of the minimum transaction cost, represented in fee levels.
    pub reference_level: String,
}

#[derive(Debug, Deserialize)]
pub struct FeeResponse {
    /// Number of transactions provisionally included in the in-progress ledger.
    pub current_ledger_size: String,
    /// Number of transactions currently queued for the next ledger.
    pub current_queue_size: String,
    /// Various information about the transaction cost (the Fee field of a
    /// transaction), in drops of XRP.
    pub drops: Drops,
    /// Various information about the transaction cost, in fee levels. The ratio
    /// in fee levels applies to any transaction relative to the minimum cost
    /// of that particular transaction.
    pub levels: Levels,
    /// The maximum number of transactions that the transaction queue can currently
    /// hold.
    pub max_queue_size: String,
}