rplaid/model/
transactions.rs

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    /// A string date with the format YYYY-MM-DD. Start date is inclusive.
10    pub start_date: T,
11    /// A string date with the format YYYY-MM-DD. End date is inclusive.
12    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    /// DEPRECATED: do not depend on this type, it will be deleted in the future.
86    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}