use serde::Deserialize;
use crate::live::frame::fields::blank;
use crate::utils::ids::whole;
use crate::utils::{Dec, Figure, MarketId};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct MarketStats {
pub symbol: String,
pub market_id: MarketId,
pub index_price: Dec,
pub mark_price: Dec,
#[serde(default, deserialize_with = "blank")]
pub mid_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_ask_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_bid_price: Option<Dec>,
pub open_interest: Dec,
pub open_interest_limit: Dec,
#[serde(default, deserialize_with = "blank")]
pub open_interest_usd: Option<Dec>,
pub funding_clamp_small: Dec,
pub funding_clamp_big: Dec,
pub last_trade_price: Dec,
pub current_funding_rate: Dec,
pub funding_rate: Dec,
#[serde(deserialize_with = "whole")]
pub funding_timestamp: u64,
pub daily_base_token_volume: Figure,
pub daily_quote_token_volume: Figure,
pub daily_price_low: Figure,
pub daily_price_high: Figure,
pub daily_price_change: Figure,
#[serde(default, deserialize_with = "blank")]
pub base_interest_rate: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub premium: Option<Dec>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct SpotMarketStats {
pub symbol: String,
pub market_id: MarketId,
#[serde(default, deserialize_with = "blank")]
pub index_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub mid_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_ask_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_bid_price: Option<Dec>,
pub last_trade_price: Dec,
pub daily_base_token_volume: Figure,
pub daily_quote_token_volume: Figure,
pub daily_price_low: Figure,
pub daily_price_high: Figure,
pub daily_price_change: Figure,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum BoStatus {
Inactive,
Active,
WaitingForSettlement,
InSettlement,
Settled,
#[serde(other)]
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct BoMarketStats {
pub symbol: String,
pub market_id: MarketId,
#[serde(default, deserialize_with = "blank")]
pub mid_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_ask_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub best_bid_price: Option<Dec>,
#[serde(default, deserialize_with = "blank")]
pub last_trade_price: Option<Dec>,
pub daily_base_token_volume: Figure,
pub daily_quote_token_volume: Figure,
pub daily_price_low: Figure,
pub daily_price_high: Figure,
pub daily_price_change: Figure,
pub lifetime_quote_token_volume: Figure,
pub lifetime_base_token_volume: Figure,
#[serde(default, deserialize_with = "blank")]
pub open_interest: Option<Dec>,
pub status: BoStatus,
#[serde(default)]
pub outcome: u8,
}