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")]
21 pub async fn list_transactions(
22 &self,
23 params: &ListTransactionsParams,
24 ) -> Result<Vec<Transaction>> {
25 let path = "/issuing/transactions";
26 let query_string = serde_urlencoded::to_string(params)?;
27 let full_path = if query_string.is_empty() {
28 path.to_string()
29 } else {
30 format!("{path}?{query_string}")
31 };
32 self.get(&full_path).await
33 }
34
35 #[cfg(feature = "async")]
45 pub async fn get_transaction(&self, transaction_id: &Uuid) -> Result<Transaction> {
46 let path = format!("/issuing/transactions/{transaction_id}");
47 self.get(&path).await
48 }
49
50 #[cfg(feature = "async")]
61 pub async fn update_transaction(
62 &self,
63 transaction_id: &Uuid,
64 request: &UpdateTransactionRequest,
65 ) -> Result<()> {
66 let path = format!("/issuing/transactions/{transaction_id}");
67 let _: serde_json::Value = self.patch(&path, request).await?;
68 Ok(())
69 }
70
71 #[cfg(feature = "async")]
81 pub async fn get_transaction_receipt(&self, transaction_id: &Uuid) -> Result<Vec<u8>> {
82 let path = format!("/issuing/transactions/{transaction_id}/receipt");
83 self.get_bytes(&path).await
84 }
85
86 #[cfg(feature = "async")]
97 pub async fn upload_transaction_receipt(
98 &self,
99 transaction_id: &Uuid,
100 request: &UploadReceiptRequest,
101 ) -> Result<()> {
102 let path = format!("/issuing/transactions/{transaction_id}/receipt");
103
104 use reqwest::multipart::{Form, Part};
105 let form = Form::new().part(
106 "receipt",
107 Part::bytes(request.receipt.clone()).file_name(request.file_name.clone()),
108 );
109
110 self.put_multipart_no_content(&path, form).await
111 }
112
113 #[cfg(feature = "sync")]
119 pub fn list_transactions_blocking(
120 &self,
121 params: &ListTransactionsParams,
122 ) -> Result<Vec<Transaction>> {
123 let path = "/issuing/transactions";
124 let query_string = serde_urlencoded::to_string(params)?;
125 let full_path = if query_string.is_empty() {
126 path.to_string()
127 } else {
128 format!("{path}?{query_string}")
129 };
130 self.get_blocking(&full_path)
131 }
132
133 #[cfg(feature = "sync")]
135 pub fn get_transaction_blocking(&self, transaction_id: &Uuid) -> Result<Transaction> {
136 let path = format!("/issuing/transactions/{transaction_id}");
137 self.get_blocking(&path)
138 }
139
140 #[cfg(feature = "sync")]
142 pub fn update_transaction_blocking(
143 &self,
144 transaction_id: &Uuid,
145 request: &UpdateTransactionRequest,
146 ) -> Result<()> {
147 let path = format!("/issuing/transactions/{transaction_id}");
148 let _: serde_json::Value = self.patch_blocking(&path, request)?;
149 Ok(())
150 }
151
152 #[cfg(feature = "sync")]
154 pub fn get_transaction_receipt_blocking(&self, transaction_id: &Uuid) -> Result<Vec<u8>> {
155 let path = format!("/issuing/transactions/{transaction_id}/receipt");
156 self.get_bytes_blocking(&path)
157 }
158
159 #[cfg(feature = "sync")]
161 pub fn upload_transaction_receipt_blocking(
162 &self,
163 transaction_id: &Uuid,
164 request: &UploadReceiptRequest,
165 ) -> Result<()> {
166 let path = format!("/issuing/transactions/{transaction_id}/receipt");
167
168 use reqwest::blocking::multipart::{Form, Part};
169 let form = Form::new().part(
170 "receipt",
171 Part::bytes(request.receipt.clone()).file_name(request.file_name.clone()),
172 );
173
174 self.put_multipart_blocking_no_content(&path, form)
175 }
176}