use chrono::{DateTime, Utc};
use serde::{Deserialize, Deserializer};
pub fn deserialize_clob_token_ids<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
where
D: Deserializer<'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
serde_json::from_str(&s).map_err(serde::de::Error::custom)
}
#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Market {
pub id: String,
pub question: String,
pub condition_id: String,
pub slug: String,
pub resolution_source: String,
pub end_date: DateTime<Utc>,
pub start_date: DateTime<Utc>,
pub description: String,
pub outcomes: String,
pub outcome_prices: String,
pub active: bool,
pub closed: bool,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub restricted: bool,
pub enable_order_book: bool,
pub order_price_min_tick_size: f64,
pub order_min_size: f64,
pub has_reviewed_dates: bool,
#[serde(deserialize_with = "deserialize_clob_token_ids")]
pub clob_token_ids: Vec<String>,
pub spread: f64,
pub approved: bool,
#[serde(default)]
pub archived: Option<bool>,
#[serde(default)]
pub resolved_by: Option<String>,
#[serde(rename = "questionID", default)]
pub question_id: Option<String>,
#[serde(default)]
pub volume_num: Option<f64>,
#[serde(default)]
pub liquidity_num: Option<f64>,
#[serde(default)]
pub end_date_iso: Option<String>,
#[serde(default)]
pub start_date_iso: Option<String>,
#[serde(default)]
pub volume_clob: Option<f64>,
#[serde(default)]
pub liquidity_clob: Option<f64>,
#[serde(default)]
pub accepting_orders: Option<bool>,
#[serde(default)]
pub accepting_orders_timestamp: Option<DateTime<Utc>>,
#[serde(default)]
pub neg_risk: Option<bool>,
#[serde(default)]
pub ready: Option<bool>,
#[serde(default)]
pub funded: Option<bool>,
#[serde(default)]
pub competitive: Option<f64>,
#[serde(default)]
pub last_trade_price: Option<f64>,
#[serde(default)]
pub best_bid: Option<f64>,
#[serde(default)]
pub best_ask: Option<f64>,
#[serde(default)]
pub automatically_active: Option<bool>,
#[serde(default)]
pub clear_book_on_start: Option<bool>,
#[serde(default)]
pub manual_activation: Option<bool>,
#[serde(default)]
pub neg_risk_other: Option<bool>,
#[serde(default)]
pub uma_resolution_status: Option<String>,
#[serde(default)]
pub uma_resolution_statuses: Option<String>,
#[serde(default)]
pub pending_deployment: Option<bool>,
#[serde(default)]
pub deploying: Option<bool>,
#[serde(default)]
pub deploying_timestamp: Option<DateTime<Utc>>,
#[serde(default)]
pub event_start_time: Option<DateTime<Utc>>,
#[serde(default)]
pub fees_enabled: Option<bool>,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub icon: Option<String>,
#[serde(default)]
pub volume: Option<String>,
#[serde(default)]
pub liquidity: Option<String>,
#[serde(default)]
pub market_maker_address: Option<String>,
#[serde(default)]
pub new: Option<bool>,
#[serde(default)]
pub featured: Option<bool>,
#[serde(default)]
pub submitted_by: Option<String>,
#[serde(default)]
pub volume_24hr: Option<f64>,
#[serde(default)]
pub volume_1wk: Option<f64>,
#[serde(default)]
pub volume_1mo: Option<f64>,
#[serde(default)]
pub volume_1yr: Option<f64>,
#[serde(default)]
pub volume_24hr_clob: Option<f64>,
#[serde(default)]
pub volume_1wk_clob: Option<f64>,
#[serde(default)]
pub volume_1mo_clob: Option<f64>,
#[serde(default)]
pub volume_1yr_clob: Option<f64>,
#[serde(default)]
pub custom_liveness: Option<f64>,
#[serde(default)]
pub cyom: Option<bool>,
#[serde(default)]
pub holding_rewards_enabled: Option<bool>,
#[serde(default)]
pub pager_duty_notification_enabled: Option<bool>,
#[serde(default)]
pub rfq_enabled: Option<bool>,
#[serde(default)]
pub rewards_min_size: Option<f64>,
#[serde(default)]
pub rewards_max_spread: Option<f64>,
#[serde(default)]
pub uma_bond: Option<String>,
#[serde(default)]
pub uma_reward: Option<String>,
#[serde(default)]
pub one_hour_price_change: Option<f64>,
#[serde(default)]
pub one_day_price_change: Option<f64>,
#[serde(default)]
pub neg_risk_request_id: Option<String>,
}