Skip to main content

xrpl/models/ledger/
mod.rs

1use alloc::{borrow::Cow, vec::Vec};
2use objects::LedgerEntry;
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6pub mod objects;
7
8#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
9#[serde(untagged)]
10pub enum LedgerVersionMap<'a> {
11    Default(Ledger<'a>),
12    V1(LedgerV1<'a>),
13}
14
15#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
16pub struct Ledger<'a> {
17    #[serde(flatten)]
18    pub base: BaseLedger<'a>,
19    pub ledger_index: u32,
20}
21
22#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
23pub struct LedgerV1<'a> {
24    #[serde(flatten)]
25    pub base: BaseLedger<'a>,
26    pub ledger_index: Cow<'a, str>,
27}
28
29#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
30pub struct BaseLedger<'a> {
31    pub account_hash: Cow<'a, str>,
32    pub account_state: Option<Vec<LedgerEntry<'a>>>,
33    pub close_flags: u32,
34    pub close_time: u64,
35    pub close_time_human: Cow<'a, str>,
36    pub close_time_resolution: u32,
37    pub close_time_iso: Cow<'a, str>,
38    pub closed: bool,
39    pub ledger_hash: Cow<'a, str>,
40    pub parent_close_time: u64,
41    pub parent_hash: Cow<'a, str>,
42    pub total_coins: Cow<'a, str>,
43    pub transaction_hash: Cow<'a, str>,
44    pub transactions: Option<Vec<TransactionWithMetadata<'a>>>,
45}
46
47#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
48pub struct TransactionWithMetadata<'a> {
49    pub hash: Cow<'a, str>,
50    pub metadata: Option<Value>, // TODO: Replace with actual metadata as soon as it's implemented
51}