use crate::TradingPair;
pub struct UrlMaker {
api_base: reqwest::Url,
}
impl UrlMaker {
pub fn new(api_base: String) -> UrlMaker {
let url = reqwest::Url::parse(&api_base).unwrap();
UrlMaker { api_base: url }
}
fn build_url(&self, path: &str) -> reqwest::Url {
self.api_base.join(path).unwrap()
}
pub fn ticker(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("ticker");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn tickers(&self) -> reqwest::Url {
self.build_url("tickers")
}
pub fn orderbook_top(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("orderbook_top");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn orderbook(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("orderbook");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn trades(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("trades");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn accounts(&self) -> reqwest::Url {
self.build_url("accounts")
}
pub fn account_name(&self, account_id: &str, name: &str) -> reqwest::Url {
let mut url = self.accounts();
url.path_segments_mut().unwrap().extend(&[account_id]);
url.query_pairs_mut().append_pair("name", name);
url
}
pub fn balance(&self) -> reqwest::Url {
self.build_url("balance")
}
pub fn transactions(&self, account_id: &str, min_row: i64, max_row: i64) -> reqwest::Url {
let mut url = self.accounts();
url.path_segments_mut()
.unwrap()
.extend(&[account_id, "transactions"]);
url.query_pairs_mut()
.append_pair("min_row", &min_row.to_string())
.append_pair("max_row", &max_row.to_string());
url
}
pub fn pending_transactions(&self, account_id: &str) -> reqwest::Url {
let mut url = self.accounts();
url.path_segments_mut()
.unwrap()
.extend(&[account_id, "pending"]);
url
}
pub fn beneficiaries(&self) -> reqwest::Url {
self.build_url("beneficiaries")
}
pub fn list_orders(&self) -> reqwest::Url {
self.build_url("listorders")
}
pub fn post_order(&self) -> reqwest::Url {
self.build_url("postorder")
}
pub fn market_order(&self) -> reqwest::Url {
self.build_url("marketorder")
}
pub fn stop_order(&self) -> reqwest::Url {
self.build_url("stoporder")
}
pub fn orders(&self, order_id: &str) -> reqwest::Url {
let mut url = self.build_url("orders");
url.path_segments_mut().unwrap().extend(&[order_id]);
url
}
pub fn list_trades(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("listtrades");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn fee_info(&self, pair: TradingPair) -> reqwest::Url {
let mut url = self.build_url("fee_info");
url.query_pairs_mut().append_pair("pair", &pair.to_string());
url
}
pub fn quotes(&self) -> reqwest::Url {
self.build_url("quotes")
}
pub fn quote_action(&self, id: &str) -> reqwest::Url {
let mut url = self.quotes();
url.path_segments_mut().unwrap().extend(&[id]);
url
}
}