use crate::models::*;
#[derive(Default, Clone)]
pub struct ClaimableBalanceId(String);
#[derive(Default, Clone)]
pub struct NoClaimableBalanceId;
#[derive(Default)]
pub struct SingleClaimableBalanceRequest<I> {
claimable_balance_id: I,
}
impl SingleClaimableBalanceRequest<NoClaimableBalanceId> {
pub fn new() -> Self {
SingleClaimableBalanceRequest::default()
}
pub fn set_claimable_balance_id(
self,
claimable_balance_id: impl Into<String>,
) -> SingleClaimableBalanceRequest<ClaimableBalanceId> {
SingleClaimableBalanceRequest {
claimable_balance_id: ClaimableBalanceId(claimable_balance_id.into()),
}
}
}
impl Request for SingleClaimableBalanceRequest<ClaimableBalanceId> {
fn get_query_parameters(&self) -> String {
let mut query = String::new();
query.push_str(&format!("{}", self.claimable_balance_id.0));
query
}
fn build_url(&self, base_url: &str) -> String {
format!(
"{}/{}/{}",
base_url,
super::CLAIMABLE_BALANCES_PATH,
self.get_query_parameters()
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_single_claimable_balance_request() {
let request =
SingleClaimableBalanceRequest::new().set_claimable_balance_id("00000000");
assert_eq!(request.get_query_parameters(), "00000000");
assert_eq!(
request.build_url("https://horizon-testnet.stellar.org"),
"https://horizon-testnet.stellar.org/claimable_balances/00000000"
);
}
}