use crate::error::Result;
use crate::types::{EnhancedTransaction, ParseTransactionsRequest, ParsedTransactionHistoryRequest};
use crate::Helius;
use reqwest::{Method, Url};
impl Helius {
pub async fn parse_transactions(&self, request: ParseTransactionsRequest) -> Result<Vec<EnhancedTransaction>> {
let api_key = self.config.require_api_key("enhanced transaction parsing")?;
let url: String = format!(
"{}v0/transactions?api-key={}",
self.config.endpoints.api,
api_key.as_str()
);
let parsed_url: Url = Url::parse(&url).expect("Failed to parse URL");
self.rpc_client
.handler
.send(Method::POST, parsed_url, Some(&request))
.await
}
pub async fn parsed_transaction_history(
&self,
request: ParsedTransactionHistoryRequest,
) -> Result<Vec<EnhancedTransaction>> {
let api_key = self.config.require_api_key("enhanced transaction history")?;
let mut url: String = format!(
"{}v0/addresses/{}/transactions?api-key={}",
self.config.endpoints.api,
request.address,
api_key.as_str()
);
if let Some(before) = request.before {
url = format!("{}&before={}", url, before);
}
if let Some(until) = request.until {
url = format!("{}&until={}", url, until);
}
if let Some(commitment) = request.commitment {
url = format!("{}&commitment={}", url, commitment);
}
if let Some(source) = request.source {
url = format!("{}&source={}", url, source);
}
if let Some(transaction_type) = request.transaction_type {
url = format!("{}&type={}", url, transaction_type);
}
if let Some(limit) = request.limit {
url = format!("{}&limit={}", url, limit);
}
let parsed_url: Url = Url::parse(&url).expect("Failed to parse URL");
self.rpc_client.handler.send(Method::GET, parsed_url, None::<&()>).await
}
}