xrpl_api/api/
account_offers.rs1use 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}