use crate::models::{Order, Request};
use crate::BuildQueryParametersExt;
use stellar_rust_sdk_derive::pagination;
#[pagination]
#[derive(Default)]
pub struct EffectsForLiquidityPoolRequest {
liquidity_pool_id: Option<String>,
}
impl EffectsForLiquidityPoolRequest {
pub fn new() -> Self {
EffectsForLiquidityPoolRequest::default()
}
pub fn set_liquidity_pool_id(
self,
liquidity_pool_id: impl Into<String>,
) -> EffectsForLiquidityPoolRequest {
EffectsForLiquidityPoolRequest {
liquidity_pool_id: Some(liquidity_pool_id.into()),
..self
}
}
}
impl Request for EffectsForLiquidityPoolRequest {
fn get_query_parameters(&self) -> String {
vec![
self.liquidity_pool_id
.as_ref()
.map(|l| format!("liquidity_pool_id={}", l)),
self.cursor.as_ref().map(|c| format!("cursor={}", c)),
self.limit.as_ref().map(|l| format!("limit={}", l)),
self.order.as_ref().map(|o| format!("order={}", o)),
]
.build_query_parameters()
}
fn build_url(&self, base_url: &str) -> String {
format!(
"{}/{}{}",
base_url,
super::EFFECTS_PATH,
self.get_query_parameters()
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::BuildQueryParametersExt;
#[test]
fn test_effects_for_liquidity_pools_request() {
let request = EffectsForLiquidityPoolRequest::new()
.set_liquidity_pool_id("liquidity_pool_id")
.set_cursor(1)
.unwrap()
.set_limit(10)
.unwrap()
.set_order(Order::Asc)
.unwrap();
let url = request.build_url("https://horizon-testnet.stellar.org");
let query_parameters = vec![
Some("liquidity_pool_id=liquidity_pool_id".to_string()),
Some("cursor=1".to_string()),
Some("limit=10".to_string()),
Some("order=asc".to_string()),
]
.build_query_parameters();
assert_eq!(
url,
"https://horizon-testnet.stellar.org/effects?liquidity_pool_id=liquidity_pool_id&cursor=1&limit=10&order=asc"
);
assert_eq!(
query_parameters,
"?liquidity_pool_id=liquidity_pool_id&cursor=1&limit=10&order=asc"
);
}
}