use crate::models::*;
use stellar_rust_sdk_derive::pagination;
#[derive(Default, Clone)]
pub struct TradeOfferId(String);
#[derive(Default, Clone)]
pub struct NoTradeOfferId;
#[pagination]
#[derive(Default)]
pub struct TradesForOfferRequest<I> {
offer_id: I,
}
impl TradesForOfferRequest<TradeOfferId> {
pub fn new() -> Self {
TradesForOfferRequest::default()
}
pub fn set_offer_id(
self,
offer_id: impl Into<String>,
) -> Result<TradesForOfferRequest<TradeOfferId>, String> {
Ok(TradesForOfferRequest {
offer_id: TradeOfferId(offer_id.into()),
cursor: self.cursor,
limit: self.limit,
order: self.order,
})
}
}
impl Request for TradesForOfferRequest<TradeOfferId> {
fn get_query_parameters(&self) -> String {
let mut query = String::new();
query.push_str(&format!("{}", self.offer_id.0));
query.trim_end_matches('&').to_string()
}
fn build_url(&self, base_url: &str) -> String {
use crate::offers::OFFERS_PATH;
format!(
"{}/{}/{}/{}",
base_url,
OFFERS_PATH,
self.get_query_parameters(),
super::TRADES_PATH
)
}
}