use crate::models::quote::FormattedValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "dataframe", derive(crate::ToDataFrame))]
#[serde(rename_all = "camelCase")]
pub struct ScreenerQuote {
pub symbol: String,
#[serde(default, alias = "companyshortname")]
pub short_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub long_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub quote_type: String,
pub exchange: String,
pub regular_market_price: FormattedValue<f64>,
pub regular_market_change: FormattedValue<f64>,
pub regular_market_change_percent: FormattedValue<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_open: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_day_high: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_day_low: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_previous_close: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_time: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regular_market_volume: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_daily_volume3_month: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_daily_volume10_day: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub market_cap: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shares_outstanding: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_two_week_high: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_two_week_low: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_two_week_change: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_two_week_change_percent: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_day_average: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_day_average_change: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fifty_day_average_change_percent: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub two_hundred_day_average: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub two_hundred_day_average_change: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub two_hundred_day_average_change_percent: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_analyst_rating: Option<String>,
#[serde(rename = "trailingPE", skip_serializing_if = "Option::is_none")]
pub trailing_pe: Option<FormattedValue<f64>>,
#[serde(rename = "forwardPE", skip_serializing_if = "Option::is_none")]
pub forward_pe: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_to_book: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub book_value: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eps_trailing_twelve_months: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eps_forward: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eps_current_year: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_eps_current_year: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dividend_yield: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dividend_rate: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dividend_date: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trailing_annual_dividend_rate: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trailing_annual_dividend_yield: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bid: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bid_size: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ask: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ask_size: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_market_price: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_market_change: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_market_change_percent: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_market_time: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_market_price: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_market_change: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_market_change_percent: Option<FormattedValue<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_market_time: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub earnings_timestamp: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub earnings_timestamp_start: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub earnings_timestamp_end: Option<FormattedValue<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
}