use serde::{Deserialize, Serialize};
use std::ops::Deref;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(transparent)]
pub struct SearchQuotes(pub Vec<SearchQuote>);
impl Deref for SearchQuotes {
type Target = Vec<SearchQuote>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl IntoIterator for SearchQuotes {
type Item = SearchQuote;
type IntoIter = std::vec::IntoIter<SearchQuote>;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}
impl<'a> IntoIterator for &'a SearchQuotes {
type Item = &'a SearchQuote;
type IntoIter = std::slice::Iter<'a, SearchQuote>;
fn into_iter(self) -> Self::IntoIter {
self.0.iter()
}
}
#[cfg(feature = "dataframe")]
impl SearchQuotes {
pub fn to_dataframe(&self) -> ::polars::prelude::PolarsResult<::polars::prelude::DataFrame> {
SearchQuote::vec_to_dataframe(&self.0)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "dataframe", derive(crate::ToDataFrame))]
#[non_exhaustive]
#[serde(rename_all = "camelCase")]
pub struct SearchQuote {
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub short_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub long_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exchange: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exch_disp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_disp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub industry: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub industry_disp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sector: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sector_disp: Option<String>,
#[serde(rename = "isYahooFinance")]
#[serde(skip_serializing_if = "Option::is_none")]
pub is_yahoo_finance: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disp_sec_ind_flag: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prev_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name_change_date: Option<String>,
}