use crate::models::*;
#[derive(Default, Clone)]
pub struct TransactionHash(String);
#[derive(Default, Clone)]
pub struct NoTransactionHash;
#[derive(Default)]
pub struct SingleTransactionRequest<T> {
transaction_hash: T,
}
impl SingleTransactionRequest<NoTransactionHash> {
pub fn new() -> Self {
SingleTransactionRequest::default()
}
pub fn set_transaction_hash(
self,
transaction_hash: impl Into<String>,
) -> Result<SingleTransactionRequest<TransactionHash>, String> {
let transaction_hash = transaction_hash.into();
match transaction_hash.len() {
64 => Ok(SingleTransactionRequest {
transaction_hash: TransactionHash(transaction_hash),
}),
_ => Err("Transaction hash must be 64 characters long".to_string()),
}
}
}
impl Request for SingleTransactionRequest<TransactionHash> {
fn get_query_parameters(&self) -> String {
let mut query = String::new();
query.push_str(&format!("{}", self.transaction_hash.0));
query.trim_end_matches('&').to_string()
}
fn build_url(&self, base_url: &str) -> String {
format!(
"{}/{}/{}",
base_url,
super::TRANSACTIONS_PATH,
self.get_query_parameters()
)
}
}