rain_sdk/api/
transactions.rs1use crate::client::RainClient;
6use crate::error::Result;
7use crate::models::transactions::*;
8use uuid::Uuid;
9
10impl RainClient {
11 #[cfg(feature = "async")]
27 pub async fn list_transactions(
28 &self,
29 params: &ListTransactionsParams,
30 ) -> Result<Vec<Transaction>> {
31 let path = "/transactions";
32 let query_string = serde_urlencoded::to_string(params)?;
33 let full_path = if query_string.is_empty() {
34 path.to_string()
35 } else {
36 format!("{path}?{query_string}")
37 };
38 self.get(&full_path).await
39 }
40
41 #[cfg(feature = "async")]
58 pub async fn get_transaction(&self, transaction_id: &Uuid) -> Result<Transaction> {
59 let path = format!("/transactions/{transaction_id}");
60 self.get(&path).await
61 }
62
63 #[cfg(feature = "async")]
82 pub async fn update_transaction(
83 &self,
84 transaction_id: &Uuid,
85 request: &UpdateTransactionRequest,
86 ) -> Result<()> {
87 let path = format!("/transactions/{transaction_id}");
88 let _: serde_json::Value = self.patch(&path, request).await?;
89 Ok(())
90 }
91
92 #[cfg(feature = "async")]
102 pub async fn get_transaction_receipt(&self, transaction_id: &Uuid) -> Result<Vec<u8>> {
103 let path = format!("/transactions/{transaction_id}/receipt");
104 self.get_bytes(&path).await
105 }
106
107 #[cfg(feature = "async")]
118 pub async fn upload_transaction_receipt(
119 &self,
120 transaction_id: &Uuid,
121 request: &UploadReceiptRequest,
122 ) -> Result<()> {
123 let path = format!("/transactions/{transaction_id}/receipt");
124
125 use reqwest::multipart::{Form, Part};
126 let form = Form::new().part(
127 "receipt",
128 Part::bytes(request.receipt.clone()).file_name(request.file_name.clone()),
129 );
130
131 self.put_multipart_no_content(&path, form).await
132 }
133
134 #[cfg(feature = "sync")]
140 pub fn list_transactions_blocking(
141 &self,
142 params: &ListTransactionsParams,
143 ) -> Result<Vec<Transaction>> {
144 let path = "/transactions";
145 let query_string = serde_urlencoded::to_string(params)?;
146 let full_path = if query_string.is_empty() {
147 path.to_string()
148 } else {
149 format!("{path}?{query_string}")
150 };
151 self.get_blocking(&full_path)
152 }
153
154 #[cfg(feature = "sync")]
156 pub fn get_transaction_blocking(&self, transaction_id: &Uuid) -> Result<Transaction> {
157 let path = format!("/transactions/{transaction_id}");
158 self.get_blocking(&path)
159 }
160
161 #[cfg(feature = "sync")]
163 pub fn update_transaction_blocking(
164 &self,
165 transaction_id: &Uuid,
166 request: &UpdateTransactionRequest,
167 ) -> Result<()> {
168 let path = format!("/transactions/{transaction_id}");
169 let _: serde_json::Value = self.patch_blocking(&path, request)?;
170 Ok(())
171 }
172
173 #[cfg(feature = "sync")]
175 pub fn get_transaction_receipt_blocking(&self, transaction_id: &Uuid) -> Result<Vec<u8>> {
176 let path = format!("/transactions/{transaction_id}/receipt");
177 self.get_bytes_blocking(&path)
178 }
179
180 #[cfg(feature = "sync")]
182 pub fn upload_transaction_receipt_blocking(
183 &self,
184 transaction_id: &Uuid,
185 request: &UploadReceiptRequest,
186 ) -> Result<()> {
187 let path = format!("/transactions/{transaction_id}/receipt");
188
189 use reqwest::blocking::multipart::{Form, Part};
190 let form = Form::new().part(
191 "receipt",
192 Part::bytes(request.receipt.clone()).file_name(request.file_name.clone()),
193 );
194
195 self.put_multipart_blocking_no_content(&path, form)
196 }
197}