use crate::client::{ApiError, Transport, info};
use crate::markets::dexes::dex::request;
use crate::utils::Dec;
use serde::Deserialize;
#[must_use]
pub fn perp_dex_limits_request(dex: &str) -> String {
request("perpDexLimits", Some(dex))
}
pub async fn perp_dex_limits(transport: &impl Transport, dex: &str) -> Result<Option<DexLimits>, ApiError> {
info(transport, perp_dex_limits_request(dex)).await
}
#[must_use]
pub fn perp_dex_status_request(dex: &str) -> String {
request("perpDexStatus", Some(dex))
}
pub async fn perp_dex_status(transport: &impl Transport, dex: &str) -> Result<Option<DexStatus>, ApiError> {
info(transport, perp_dex_status_request(dex)).await
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DexLimits {
pub total_oi_cap: Dec,
pub oi_sz_cap_per_perp: Dec,
pub max_transfer_ntl: Dec,
#[serde(default)]
pub coin_to_oi_cap: Vec<(String, Dec)>,
}
impl DexLimits {
#[must_use]
pub fn coin_cap(&self, coin: &str) -> Option<Dec> {
self.coin_to_oi_cap.iter().find(|(listed, _)| listed == coin).map(|(_, cap)| *cap)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DexStatus {
pub total_net_deposit: Dec,
}