use crate::{
Request, RequestPagination, ResponsePagination, RetrieveLedgerSpec, ReturnLedgerSpec,
WithLedgerSpec, WithRequestPagination, WithResponsePagination,
};
use serde::{Deserialize, Serialize};
#[derive(Default, Debug, Clone, Serialize)]
pub struct AccountChannelsRequest {
account: String,
#[serde(skip_serializing_if = "Option::is_none")]
destination_account: Option<String>,
#[serde(flatten)]
pub ledger_spec: RetrieveLedgerSpec,
#[serde(flatten)]
pub pagination: RequestPagination,
}
impl Request for AccountChannelsRequest {
type Response = AccountChannelsResponse;
fn method(&self) -> String {
"account_channels".to_owned()
}
}
impl WithLedgerSpec for AccountChannelsRequest {
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 WithRequestPagination for AccountChannelsRequest {
fn as_pagination(&self) -> &RequestPagination {
&self.pagination
}
fn as_pagination_mut(&mut self) -> &mut RequestPagination {
&mut self.pagination
}
}
impl AccountChannelsRequest {
pub fn new(account: &str) -> Self {
Self {
account: account.to_owned(),
..Default::default()
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AccountChannel {
pub account: String,
pub destination_account: String,
pub amount: String,
pub balance: String,
pub channel_id: String,
pub settle_delay: u32,
pub public_key: Option<String>,
pub expiration: Option<u32>,
pub cancel_after: Option<u32>,
pub source_tag: Option<u32>,
pub destination_tag: Option<u32>,
}
#[derive(Debug, Deserialize)]
pub struct AccountChannelsResponse {
pub account: String,
pub channels: Vec<AccountChannel>,
#[serde(flatten)]
pub ledger_spec: ReturnLedgerSpec,
#[serde(flatten)]
pub pagination: ResponsePagination,
}
impl WithResponsePagination for AccountChannelsResponse {
fn as_pagination(&self) -> &ResponsePagination {
&self.pagination
}
}