use super::types::{Exchange, ExchangeListItem, ExchangeTickers, VolumeChart};
use crate::client::Client;
use crate::error::Result;
pub struct ExchangesApi<'a> {
client: &'a Client,
}
impl<'a> ExchangesApi<'a> {
#[must_use]
pub fn new(client: &'a Client) -> Self {
Self { client }
}
pub async fn list(&self) -> Result<Vec<Exchange>> {
self.client.get("/exchanges").await
}
pub async fn list_paginated(&self, per_page: u32, page: u32) -> Result<Vec<Exchange>> {
let path = format!("/exchanges?per_page={per_page}&page={page}");
self.client.get(&path).await
}
pub async fn id_list(&self) -> Result<Vec<ExchangeListItem>> {
self.client.get("/exchanges/list").await
}
pub async fn get(&self, id: &str) -> Result<Exchange> {
let path = format!("/exchanges/{id}");
self.client.get(&path).await
}
pub async fn tickers(&self, id: &str) -> Result<ExchangeTickers> {
let path = format!("/exchanges/{id}/tickers");
self.client.get(&path).await
}
pub async fn volume_chart(&self, id: &str, days: u32) -> Result<VolumeChart> {
let path = format!("/exchanges/{id}/volume_chart?days={days}");
self.client.get(&path).await
}
pub async fn volume_chart_range(&self, id: &str, from: u64, to: u64) -> Result<VolumeChart> {
let path = format!("/exchanges/{id}/volume_chart/range?from={from}&to={to}");
self.client.get(&path).await
}
}