xrpl_api/api/
account_offers.rs

1//! The account_offers method retrieves a list of offers made by a given account
2//! that are outstanding as of a particular ledger version.
3//!
4//! <https://xrpl.org/account_offers.html>
5
6use crate::{
7    Amount, OfferFlags, Request, RequestPagination, ResponsePagination, RetrieveLedgerSpec,
8    ReturnLedgerSpec, WithLedgerSpec, WithRequestPagination, WithResponsePagination,
9};
10use enumflags2::BitFlags;
11use serde::{Deserialize, Serialize};
12
13#[derive(Default, Debug, Clone, Serialize)]
14pub struct AccountOffersRequest {
15    account: String,
16    #[serde(flatten)]
17    pub ledger_spec: RetrieveLedgerSpec,
18    #[serde(flatten)]
19    pub pagination: RequestPagination,
20}
21
22impl Request for AccountOffersRequest {
23    type Response = AccountOffersResponse;
24
25    fn method(&self) -> String {
26        "account_offers".to_owned()
27    }
28}
29
30impl WithLedgerSpec for AccountOffersRequest {
31    fn as_ledger_spec(&self) -> &crate::RetrieveLedgerSpec {
32        &self.ledger_spec
33    }
34
35    fn as_ledger_spec_mut(&mut self) -> &mut crate::RetrieveLedgerSpec {
36        &mut self.ledger_spec
37    }
38}
39
40impl WithRequestPagination for AccountOffersRequest {
41    fn as_pagination(&self) -> &RequestPagination {
42        &self.pagination
43    }
44
45    fn as_pagination_mut(&mut self) -> &mut RequestPagination {
46        &mut self.pagination
47    }
48}
49
50impl AccountOffersRequest {
51    pub fn new(account: &str) -> Self {
52        Self {
53            account: account.to_owned(),
54            ..Default::default()
55        }
56    }
57}
58
59#[derive(Debug, Serialize, Deserialize)]
60pub struct AccountOffer {
61    pub flags: BitFlags<OfferFlags>,
62    pub quality: String,
63    pub seq: u32,
64    pub taker_gets: Amount,
65    pub taker_pays: Amount,
66}
67
68#[derive(Debug, Deserialize)]
69pub struct AccountOffersResponse {
70    pub offers: Vec<AccountOffer>,
71    #[serde(flatten)]
72    pub ledger_spec: ReturnLedgerSpec,
73    #[serde(flatten)]
74    pub pagination: ResponsePagination,
75}
76
77impl WithResponsePagination for AccountOffersResponse {
78    fn as_pagination(&self) -> &ResponsePagination {
79        &self.pagination
80    }
81}