xrpl_api/api/
with_ledger_spec.rs

1use crate::{LedgerIndex, LedgerSpec, Request};
2use serde::{Deserialize, Serialize};
3
4/// Request that allows specifying ledger index to execute
5/// request on. See <https://xrpl.org/basic-data-types.html#specifying-ledgers>.
6pub trait WithLedgerSpec: Request {
7    fn as_ledger_spec(&self) -> &RetrieveLedgerSpec;
8    fn as_ledger_spec_mut(&mut self) -> &mut RetrieveLedgerSpec;
9
10    fn ledger_index(mut self, ledger_index: LedgerIndex) -> Self
11    where
12        Self: Sized,
13    {
14        self.as_ledger_spec_mut().ledger_index = Some(ledger_index);
15        self
16    }
17
18    fn ledger_hash(mut self, ledger_hash: impl Into<String>) -> Self
19    where
20        Self: Sized,
21    {
22        self.as_ledger_spec_mut().ledger_hash = Some(ledger_hash.into());
23        self
24    }
25
26    fn ledger(self, ledger: LedgerSpec) -> Self
27    where
28        Self: Sized,
29    {
30        match ledger {
31            LedgerSpec::LedgerIndex(ledger_index) => self.ledger_index(ledger_index),
32            LedgerSpec::LedgerHash(ledger_hash) => self.ledger_hash(ledger_hash),
33        }
34    }
35}
36
37/// Ledger specification when retrieving data
38#[derive(Default, Debug, Clone, Serialize)]
39pub struct RetrieveLedgerSpec {
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub ledger_hash: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub ledger_index: Option<LedgerIndex>,
44}
45
46/// Ledger specification in returned data
47#[derive(Default, Debug, Clone, Serialize, Deserialize)]
48pub struct ReturnLedgerSpec {
49    pub ledger_hash: Option<String>,
50    pub ledger_index: Option<u32>,
51    pub ledger_current_index: Option<u32>,
52    pub validated: Option<bool>,
53}