use crate::{Request, RetrieveLedgerSpec, ReturnLedgerSpec, WithLedgerSpec};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use xrpl_types::Amount;
#[derive(Default, Debug, Clone, Serialize)]
pub struct GatewayBalancesRequest {
pub account: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub hotwallet: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub strict: Option<bool>,
#[serde(flatten)]
pub ledger_spec: RetrieveLedgerSpec,
}
impl Request for GatewayBalancesRequest {
type Response = GatewayBalancesResponse;
fn method(&self) -> String {
"gateway_balances".to_owned()
}
}
impl WithLedgerSpec for GatewayBalancesRequest {
fn as_ledger_spec(&self) -> &RetrieveLedgerSpec {
&self.ledger_spec
}
fn as_ledger_spec_mut(&mut self) -> &mut RetrieveLedgerSpec {
&mut self.ledger_spec
}
}
impl GatewayBalancesRequest {
pub fn new(account: &str) -> Self {
Self {
account: account.to_owned(),
..Default::default()
}
}
pub fn strict(self, strict: bool) -> Self {
Self {
strict: Some(strict),
..self
}
}
}
#[derive(Debug, Deserialize)]
pub struct GatewayBalancesResponse {
pub account: String,
pub obligations: Option<HashMap<String, String>>,
pub balances: Option<HashMap<String, Vec<Amount>>>,
pub assets: Option<HashMap<String, Vec<Amount>>>,
#[serde(flatten)]
pub ledger_spec: ReturnLedgerSpec,
}