use crate::{LedgerObject, Request, RetrieveLedgerSpec, ReturnLedgerSpec, WithLedgerSpec};
use serde::{Deserialize, Serialize};
#[derive(Default, Debug, Clone, Serialize)]
pub struct LedgerEntryRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub binary: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offer: Option<OfferParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_root: Option<String>,
#[serde(flatten)]
pub ledger_spec: RetrieveLedgerSpec,
}
#[derive(Default, Debug, Clone, Serialize)]
pub struct OfferParams {
pub account: String,
pub seq: u32,
}
impl Request for LedgerEntryRequest {
type Response = LedgerEntryResponse;
fn method(&self) -> String {
"ledger_entry".to_owned()
}
}
impl WithLedgerSpec for LedgerEntryRequest {
fn as_ledger_spec(&self) -> &crate::RetrieveLedgerSpec {
&self.ledger_spec
}
fn as_ledger_spec_mut(&mut self) -> &mut crate::RetrieveLedgerSpec {
&mut self.ledger_spec
}
}
impl LedgerEntryRequest {
pub fn offer(account: impl Into<String>, sequence: u32) -> Self {
Self {
offer: Some(OfferParams {
account: account.into(),
seq: sequence,
}),
..Default::default()
}
}
pub fn account(account: impl Into<String>) -> Self {
Self {
account_root: Some(account.into()),
..Default::default()
}
}
}
#[derive(Debug, Deserialize)]
pub struct LedgerEntryResponse {
pub index: String,
pub node: Option<LedgerObject>,
pub node_binary: Option<String>,
#[serde(flatten)]
pub ledger_spec: ReturnLedgerSpec,
}