finance_query_core/websocket/
mod.rs1use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8
9use crate::models::movers::MarketMover;
10use crate::models::sectors::MarketSector;
11use crate::models::{News, Quote, SimpleQuote};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct QuotesUpdate {
18 pub quotes: Vec<SimpleQuote>,
20 pub timestamp: DateTime<Utc>,
22}
23
24impl QuotesUpdate {
25 pub fn single(quote: SimpleQuote) -> Self {
27 Self {
28 quotes: vec![quote],
29 timestamp: Utc::now(),
30 }
31 }
32
33 pub fn multiple(quotes: Vec<SimpleQuote>) -> Self {
35 Self {
36 quotes,
37 timestamp: Utc::now(),
38 }
39 }
40
41 pub fn new(quotes: Vec<SimpleQuote>) -> Self {
43 Self::multiple(quotes)
44 }
45
46 pub fn with_timestamp(quotes: Vec<SimpleQuote>, timestamp: DateTime<Utc>) -> Self {
48 Self { quotes, timestamp }
49 }
50
51 pub fn contains_symbol(&self, symbol: &str) -> bool {
53 self.quotes.iter().any(|q| q.symbol == symbol)
54 }
55
56 pub fn get_quote(&self, symbol: &str) -> Option<&SimpleQuote> {
58 self.quotes.iter().find(|q| q.symbol == symbol)
59 }
60
61 pub fn is_empty(&self) -> bool {
63 self.quotes.is_empty()
64 }
65
66 pub fn len(&self) -> usize {
68 self.quotes.len()
69 }
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct ProfileUpdate {
75 pub quote: Option<Quote>,
77 pub similar: Option<Vec<SimpleQuote>>,
79 pub sector_performance: Option<MarketSector>,
81 pub news: Option<Vec<News>>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct MoversUpdate {
88 pub actives: Vec<MarketMover>,
90 pub gainers: Vec<MarketMover>,
92 pub losers: Vec<MarketMover>,
94 pub timestamp: DateTime<Utc>,
96}
97
98impl MoversUpdate {
99 pub fn new(
101 actives: Vec<MarketMover>,
102 gainers: Vec<MarketMover>,
103 losers: Vec<MarketMover>,
104 ) -> Self {
105 Self {
106 actives,
107 gainers,
108 losers,
109 timestamp: Utc::now(),
110 }
111 }
112
113 pub fn with_timestamp(
115 actives: Vec<MarketMover>,
116 gainers: Vec<MarketMover>,
117 losers: Vec<MarketMover>,
118 timestamp: DateTime<Utc>,
119 ) -> Self {
120 Self {
121 actives,
122 gainers,
123 losers,
124 timestamp,
125 }
126 }
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct MarketHours {
132 pub status: String,
134 pub reason: Option<String>,
136 pub timestamp: DateTime<Utc>,
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize)]
142pub struct MovingAverageUpdate {
143 pub symbol: String,
145 pub indicator_type: String,
147 pub period: i32,
149 pub value: f64,
151 pub timestamp: DateTime<Utc>,
153}