finance_query/models/search/
news.rs1use super::thumbnail::NewsThumbnail;
6use serde::{Deserialize, Serialize};
7use std::ops::Deref;
8
9#[derive(Debug, Clone, Default, Serialize, Deserialize)]
14#[serde(transparent)]
15pub struct SearchNewsList(pub Vec<SearchNews>);
16
17impl Deref for SearchNewsList {
18 type Target = Vec<SearchNews>;
19
20 fn deref(&self) -> &Self::Target {
21 &self.0
22 }
23}
24
25impl IntoIterator for SearchNewsList {
26 type Item = SearchNews;
27 type IntoIter = std::vec::IntoIter<SearchNews>;
28
29 fn into_iter(self) -> Self::IntoIter {
30 self.0.into_iter()
31 }
32}
33
34impl<'a> IntoIterator for &'a SearchNewsList {
35 type Item = &'a SearchNews;
36 type IntoIter = std::slice::Iter<'a, SearchNews>;
37
38 fn into_iter(self) -> Self::IntoIter {
39 self.0.iter()
40 }
41}
42
43#[cfg(feature = "dataframe")]
44impl SearchNewsList {
45 pub fn to_dataframe(&self) -> ::polars::prelude::PolarsResult<::polars::prelude::DataFrame> {
47 SearchNews::vec_to_dataframe(&self.0)
48 }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
56#[cfg_attr(feature = "dataframe", derive(crate::ToDataFrame))]
57#[non_exhaustive]
58#[serde(rename_all = "camelCase")]
59pub struct SearchNews {
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub uuid: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub title: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub publisher: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub link: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub provider_publish_time: Option<i64>,
75 #[serde(rename = "type")]
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub news_type: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub thumbnail: Option<NewsThumbnail>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub related_tickers: Option<Vec<String>>,
85}