use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "lowercase")]
pub enum OptionType {
Call,
Put,
}
impl fmt::Display for OptionType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Call => write!(f, "call"),
Self::Put => write!(f, "put"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptionChain {
pub id: Option<String>,
pub symbol: Option<String>,
pub can_open_position: Option<bool>,
pub cash_component: Option<String>,
pub expiration_dates: Option<Vec<String>>,
pub trade_value_multiplier: Option<String>,
pub underlying_instruments: Option<Vec<serde_json::Value>>,
pub min_ticks: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptionInstrument {
pub chain_id: Option<String>,
pub chain_symbol: Option<String>,
pub created_at: Option<String>,
pub expiration_date: Option<String>,
pub id: Option<String>,
pub issue_date: Option<String>,
pub min_ticks: Option<serde_json::Value>,
pub rhs_tradability: Option<String>,
pub state: Option<String>,
pub strike_price: Option<String>,
pub tradability: Option<String>,
#[serde(rename = "type")]
pub option_type: Option<String>,
pub updated_at: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptionPosition {
pub account: Option<String>,
pub average_price: Option<String>,
pub chain_id: Option<String>,
pub chain_symbol: Option<String>,
pub id: Option<String>,
pub option: Option<String>,
pub quantity: Option<String>,
#[serde(rename = "type")]
pub position_type: Option<String>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
}
#[derive(Debug, Clone)]
pub struct OptionContractSpec<'a> {
pub strike_price: &'a str,
pub expiration_date: &'a str,
pub option_type: &'a str,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptionMarketData {
pub instrument: Option<String>,
pub instrument_id: Option<String>,
pub bid_price: Option<String>,
pub ask_price: Option<String>,
pub last_trade_price: Option<String>,
pub mark_price: Option<String>,
pub break_even_price: Option<String>,
pub adjusted_mark_price: Option<String>,
pub previous_close_price: Option<String>,
pub high_price: Option<String>,
pub low_price: Option<String>,
pub delta: Option<String>,
pub gamma: Option<String>,
pub theta: Option<String>,
pub vega: Option<String>,
pub rho: Option<String>,
pub implied_volatility: Option<String>,
pub volume: Option<i64>,
pub open_interest: Option<i64>,
pub chance_of_profit_long: Option<String>,
pub chance_of_profit_short: Option<String>,
pub updated_at: Option<String>,
}