Skip to main content

tradingview/live/handler/
message.rs

1use bon::Builder;
2use iso_currency::Currency;
3use serde::{Deserialize, Serialize};
4use ustr::Ustr;
5
6use crate::{
7    Interval, MarketAdjustment, SessionType, Timezone, options::Range, study::StudyConfiguration,
8};
9
10#[derive(Debug, Clone, Serialize, Deserialize, Copy)]
11pub enum CommandCondition {
12    SessionExists(Ustr),
13    SymbolResolved(Ustr),
14    ConnectionHealthy,
15    QueueEmpty,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
19#[builder(on(Ustr, into))]
20pub struct CommandMsg {
21    pub inner: Ustr,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
25#[builder(on(Ustr, into))]
26pub struct QuoteCommandMsg {
27    pub quote_session: Ustr,
28    pub symbols: Vec<Ustr>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
32#[builder(on(Ustr, into))]
33pub struct AddReplaySeriesCommandMsg {
34    pub replay_session: Ustr,
35    pub request_id: Ustr,
36    pub instrument: Ustr, // e.g., "HOSE:FPT"
37    pub adjustment: Option<MarketAdjustment>,
38    pub session_type: Option<SessionType>,
39    pub currency: Option<Currency>,
40    pub interval: Interval,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
44#[builder(on(Ustr, into))]
45pub struct ReplayStepCommandMsg {
46    pub replay_session: Ustr,
47    pub request_id: Ustr,
48    pub step: i64,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
52#[builder(on(Ustr, into))]
53pub struct ReplayStartCommandMsg {
54    pub replay_session: Ustr,
55    pub request_id: Ustr,
56    pub interval: u64, // Milliseconds
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
60#[builder(on(Ustr, into))]
61pub struct ReplayStopCommandMsg {
62    pub replay_session: Ustr,
63    pub request_id: Ustr,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
67#[builder(on(Ustr, into))]
68pub struct SessionTerminationCommandMsg {
69    pub chart_session: Ustr,
70    pub id: Ustr,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
74#[builder(on(Ustr, into))]
75pub struct ReplayResetCommandMsg {
76    pub replay_session: Ustr,
77    pub request_id: Ustr,
78    pub timestamp: i64, // Reset to this timestamp in seconds
79}
80#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
81#[builder(on(Ustr, into))]
82pub struct StudyCommandMsg {
83    pub chart_session: Ustr,
84    pub study_ids: [Ustr; 2],
85    pub chart_series_id: Ustr,
86    pub study: StudyConfiguration,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
90#[builder(on(Ustr, into))]
91pub struct ChartSeriesCommandMsg {
92    pub chart_session: Ustr,
93    pub series_identifier: Ustr, // (sds_2)
94    pub series_id: Ustr,         // (s1)
95    pub symbol_series_id: Ustr,  // (sds_sym_2)
96    pub interval: Interval,
97    pub bar_count: u64,
98    pub range: Option<Range>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
102#[builder(on(Ustr, into))]
103pub struct ResolveSymbolCommandMsg {
104    pub session: Ustr,
105    pub symbol_series_id: Ustr,
106    pub instrument: Ustr, // e.g., "HOSE:FPT"
107    pub adjustment: Option<MarketAdjustment>,
108    pub currency: Option<Currency>,
109    pub session_type: Option<SessionType>,
110    pub replay_session: Option<Ustr>,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
114#[builder(on(Ustr, into))]
115pub struct ChartDataRequestMsg {
116    pub chart_session: Ustr,
117    pub series_id: Ustr,
118    pub num: u64,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
122#[builder(on(Ustr, into))]
123pub struct SetTimeZoneCommandMsg {
124    pub chart_session: Ustr,
125    pub timezone: Timezone, // e.g., "America/New_York"
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize, Copy, Builder)]
129#[builder(on(Ustr, into))]
130pub struct SetLocaleCommandMsg {
131    pub language: Ustr, // e.g., "en"
132    pub country: Ustr,  // e.g., "US"
133}