1#[allow(unused_imports)]
4use crate::Timestamp;
5#[allow(unused_imports)]
6use crate::ids::*;
7#[allow(unused_imports)]
8use crate::models::*;
9#[allow(unused_imports)]
10use crate::{Client, Result};
11#[allow(unused_imports)]
12use reqwest::Method;
13#[allow(unused_imports)]
14use rust_decimal::Decimal;
15#[allow(unused_imports)]
16use serde::{Deserialize, Serialize};
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
20#[serde(rename_all = "camelCase")]
21pub struct ListTransactionsQuery {
22 #[serde(rename = "from", default, skip_serializing_if = "Option::is_none")]
26 pub from: Option<Timestamp>,
27 #[serde(rename = "to", default, skip_serializing_if = "Option::is_none")]
30 pub to: Option<Timestamp>,
31 #[serde(rename = "pageSize", default, skip_serializing_if = "Option::is_none")]
33 pub page_size: Option<i64>,
34 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
36 pub r#type: Option<Vec<TransactionFilter>>,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct ListTransactionsResponse {
43 #[serde(rename = "from", default, skip_serializing_if = "Option::is_none")]
45 pub from: Option<Timestamp>,
46 #[serde(rename = "to", default, skip_serializing_if = "Option::is_none")]
48 pub to: Option<Timestamp>,
49 #[serde(rename = "pageSize", default, skip_serializing_if = "Option::is_none")]
51 pub page_size: Option<i64>,
52 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
54 pub r#type: Option<Vec<TransactionFilter>>,
55 #[serde(rename = "count", default, skip_serializing_if = "Option::is_none")]
57 pub count: Option<i64>,
58 #[serde(rename = "pages", default, skip_serializing_if = "Option::is_none")]
60 pub pages: Option<Vec<String>>,
61 #[serde(
63 rename = "lastTransactionID",
64 default,
65 skip_serializing_if = "Option::is_none"
66 )]
67 pub last_transaction_id: Option<TransactionID>,
68}
69
70impl Client {
71 pub async fn list_transactions(
73 &self,
74 account_id: &AccountID,
75 query: Option<&ListTransactionsQuery>,
76 ) -> std::result::Result<
77 crate::ApiResponse<ListTransactionsResponse>,
78 crate::OperationError<crate::GenericRejection>,
79 > {
80 let account_id_encoded = crate::client::segment(account_id.as_str());
81 let path = format!("/v3/accounts/{account_id_encoded}/transactions");
82 self.execute(Method::GET, &path, query, None::<&()>, None, None)
83 .await
84 }
85}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct TransactionDetailsResponse {
91 #[serde(
93 rename = "transaction",
94 default,
95 skip_serializing_if = "Option::is_none"
96 )]
97 pub transaction: Option<Transaction>,
98 #[serde(
100 rename = "lastTransactionID",
101 default,
102 skip_serializing_if = "Option::is_none"
103 )]
104 pub last_transaction_id: Option<TransactionID>,
105}
106
107impl Client {
108 pub async fn transaction_details(
110 &self,
111 account_id: &AccountID,
112 transaction_id: &TransactionID,
113 ) -> std::result::Result<
114 crate::ApiResponse<TransactionDetailsResponse>,
115 crate::OperationError<crate::GenericRejection>,
116 > {
117 let account_id_encoded = crate::client::segment(account_id.as_str());
118 let transaction_id_encoded = crate::client::segment(transaction_id.as_str());
119 let path =
120 format!("/v3/accounts/{account_id_encoded}/transactions/{transaction_id_encoded}");
121 self.execute(Method::GET, &path, None::<&()>, None::<&()>, None, None)
122 .await
123 }
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct TransactionsByIdRangeQuery {
130 #[serde(rename = "from")]
132 pub from: TransactionID,
133 #[serde(rename = "to")]
135 pub to: TransactionID,
136 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
138 pub r#type: Option<Vec<TransactionFilter>>,
139}
140
141#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
143#[serde(rename_all = "camelCase")]
144pub struct TransactionsByIdRangeResponse {
145 #[serde(
147 rename = "transactions",
148 default,
149 skip_serializing_if = "Option::is_none"
150 )]
151 pub transactions: Option<Vec<Transaction>>,
152 #[serde(
154 rename = "lastTransactionID",
155 default,
156 skip_serializing_if = "Option::is_none"
157 )]
158 pub last_transaction_id: Option<TransactionID>,
159}
160
161impl Client {
162 pub async fn transactions_by_id_range(
164 &self,
165 account_id: &AccountID,
166 query: &TransactionsByIdRangeQuery,
167 ) -> std::result::Result<
168 crate::ApiResponse<TransactionsByIdRangeResponse>,
169 crate::OperationError<crate::GenericRejection>,
170 > {
171 let account_id_encoded = crate::client::segment(account_id.as_str());
172 let path = format!("/v3/accounts/{account_id_encoded}/transactions/idrange");
173 self.execute(Method::GET, &path, Some(query), None::<&()>, None, None)
174 .await
175 }
176}
177
178#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
180#[serde(rename_all = "camelCase")]
181pub struct TransactionsSinceIdQuery {
182 #[serde(rename = "id")]
185 pub id: TransactionID,
186 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
188 pub r#type: Option<Vec<TransactionFilter>>,
189}
190
191#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
193#[serde(rename_all = "camelCase")]
194pub struct TransactionsSinceIdResponse {
195 #[serde(
197 rename = "transactions",
198 default,
199 skip_serializing_if = "Option::is_none"
200 )]
201 pub transactions: Option<Vec<Transaction>>,
202 #[serde(
204 rename = "lastTransactionID",
205 default,
206 skip_serializing_if = "Option::is_none"
207 )]
208 pub last_transaction_id: Option<TransactionID>,
209}
210
211impl Client {
212 pub async fn transactions_since_id(
214 &self,
215 account_id: &AccountID,
216 query: &TransactionsSinceIdQuery,
217 ) -> std::result::Result<
218 crate::ApiResponse<TransactionsSinceIdResponse>,
219 crate::OperationError<crate::GenericRejection>,
220 > {
221 let account_id_encoded = crate::client::segment(account_id.as_str());
222 let path = format!("/v3/accounts/{account_id_encoded}/transactions/sinceid");
223 self.execute(Method::GET, &path, Some(query), None::<&()>, None, None)
224 .await
225 }
226}