use serde::Deserialize;
use tracing::{instrument, trace};
use super::Client;
use super::types::TickSize;
use crate::error::Result;
#[derive(Debug, Clone, Deserialize)]
struct TickSizeResponse {
minimum_tick_size: f64,
}
#[derive(Debug, Clone, Deserialize)]
struct NegRiskResponse {
neg_risk: bool,
}
impl Client {
#[instrument(skip(self), level = "trace")]
pub async fn get_tick_size(&self, token_id: &str) -> Result<TickSize> {
let mut url = self.build_url("tick-size");
url.query_pairs_mut().append_pair("token_id", token_id);
trace!(url = %url, method = "GET", "sending HTTP request");
let response = self.http_client.get(url).send().await?;
let response = self.check_response(response).await?;
let info: TickSizeResponse = response.json().await?;
let tick_size = if (info.minimum_tick_size - 0.1).abs() < f64::EPSILON {
TickSize::PointOne
} else if (info.minimum_tick_size - 0.01).abs() < f64::EPSILON {
TickSize::PointZeroOne
} else if (info.minimum_tick_size - 0.001).abs() < f64::EPSILON {
TickSize::PointZeroZeroOne
} else if (info.minimum_tick_size - 0.0001).abs() < f64::EPSILON {
TickSize::PointZeroZeroZeroOne
} else {
TickSize::PointZeroOne };
trace!(tick_size = %tick_size, "received tick size");
Ok(tick_size)
}
#[instrument(skip(self), level = "trace")]
pub async fn get_neg_risk(&self, token_id: &str) -> Result<bool> {
let mut url = self.build_url("neg-risk");
url.query_pairs_mut().append_pair("token_id", token_id);
trace!(url = %url, method = "GET", "sending HTTP request");
let response = self.http_client.get(url).send().await?;
let response = self.check_response(response).await?;
let info: NegRiskResponse = response.json().await?;
trace!(neg_risk = %info.neg_risk, "received neg_risk");
Ok(info.neg_risk)
}
#[instrument(skip(self), level = "trace")]
pub async fn get_fee_rate_bps(&self, token_id: &str) -> Result<u32> {
let mut url = self.build_url("fee-rate-bps");
url.query_pairs_mut().append_pair("token_id", token_id);
trace!(url = %url, method = "GET", "sending HTTP request");
let response = self.http_client.get(url).send().await?;
let response = self.check_response(response).await?;
#[derive(Deserialize)]
struct FeeRateResponse {
fee_rate_bps: u32,
}
let info: FeeRateResponse = response.json().await?;
trace!(fee_rate_bps = info.fee_rate_bps, "received fee rate");
Ok(info.fee_rate_bps)
}
}