1#[cfg(feature = "decimal")]
2use rust_decimal::Decimal;
3
4use super::*;
5
6#[derive(Debug, Serialize, Copy, Clone)]
7pub struct GetTransactionsRequest<T: AsRef<str>> {
8 pub access_token: T,
9 pub start_date: T,
11 pub end_date: T,
13 pub options: Option<GetTransactionsOptions<T>>,
14}
15
16impl<T: AsRef<str> + HttpSerialize> Endpoint for GetTransactionsRequest<T> {
17 type Response = GetTransactionsResponse;
18
19 fn path(&self) -> String {
20 "/transactions/get".into()
21 }
22}
23
24#[derive(Debug, Serialize, Copy, Clone)]
25pub struct GetTransactionsOptions<T: AsRef<str>> {
26 pub account_ids: Option<T>,
27 pub count: Option<usize>,
28 pub offset: Option<usize>,
29 pub include_original_description: Option<T>,
30}
31
32#[derive(Debug, Deserialize, Serialize)]
33pub struct GetTransactionsResponse {
34 pub accounts: Vec<Account>,
35 pub transactions: Vec<Transaction>,
36 pub total_transactions: usize,
37 pub item: Item,
38 pub request_id: String,
39}
40
41#[derive(Debug, Serialize, Copy, Clone)]
42pub struct RefreshTransactionsRequest<T: AsRef<str>> {
43 pub access_token: T,
44}
45
46impl<T: AsRef<str> + HttpSerialize> Endpoint for RefreshTransactionsRequest<T> {
47 type Response = RefreshTransactionsResponse;
48
49 fn path(&self) -> String {
50 "/transactions/refresh".into()
51 }
52}
53
54#[derive(Debug, Deserialize, Serialize)]
55pub struct RefreshTransactionsResponse {
56 pub request_id: String,
57}
58
59#[derive(Debug, Serialize, Copy, Clone)]
60pub struct GetCategoriesRequest {}
61
62impl Endpoint for GetCategoriesRequest {
63 type Response = GetCategoriesResponse;
64
65 fn path(&self) -> String {
66 "/categories/get".into()
67 }
68}
69
70#[derive(Debug, Deserialize, Serialize)]
71pub struct GetCategoriesResponse {
72 pub categories: Vec<Category>,
73 pub request_id: String,
74}
75
76#[derive(Debug, Deserialize, Serialize, Clone)]
77pub struct Category {
78 category_id: String,
79 group: String,
80 hierarchy: Vec<String>,
81}
82
83#[derive(Debug, Deserialize, Serialize, Clone)]
84pub struct Transaction {
85 pub transaction_type: String,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub pending_transaction_id: Option<String>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub category_id: Option<String>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub category: Option<Vec<String>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub location: Option<TransactionLocation>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub payment_meta: Option<PaymentMetadata>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub account_owner: Option<String>,
99 pub name: String,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub original_description: Option<String>,
102 pub account_id: String,
103 #[cfg(not(feature = "decimal"))]
104 pub amount: f64,
105 #[cfg(feature = "decimal")]
106 pub amount: Decimal,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub iso_currency_code: Option<String>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub unofficial_currency_code: Option<String>,
111 pub date: String,
112 pub pending: bool,
113 pub transaction_id: String,
114 pub payment_channel: String,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub merchant_name: Option<String>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub authorized_date: Option<String>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub authorized_datetime: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub datetime: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub check_number: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub transaction_code: Option<String>,
127}
128
129#[derive(Debug, Deserialize, Serialize, Clone)]
130pub struct TransactionLocation {
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub address: Option<String>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub city: Option<String>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub region: Option<String>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub postal_code: Option<String>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub country: Option<String>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub lat: Option<f64>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub lon: Option<f64>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub store_number: Option<String>,
147}
148
149#[derive(Debug, Deserialize, Serialize, Clone)]
150pub struct PaymentMetadata {
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub reference_number: Option<String>,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub ppd_id: Option<String>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub payee: Option<String>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub by_order_of: Option<String>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub payer: Option<String>,
161 #[serde(skip_serializing_if = "Option::is_none")]
162 pub payment_method: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub payment_processor: Option<String>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub reason: Option<String>,
167}