kiteticker_async_manager/models/
request.rs

1use serde::{Deserialize, Serialize};
2
3use crate::Mode;
4
5#[derive(Clone, Debug, Deserialize, Serialize)]
6#[serde(rename_all = "lowercase")]
7///
8/// Websocket request actions
9///
10enum RequestActions {
11  Subscribe,
12  Unsubscribe,
13  Mode,
14}
15
16#[derive(Clone, Debug, Deserialize, Serialize)]
17#[serde(untagged)]
18///
19/// Websocket request data
20///
21enum RequestData {
22  InstrumentTokens(Vec<u32>),
23  InstrumentTokensWithMode(Mode, Vec<u32>),
24}
25
26#[derive(Debug, Clone, Deserialize, Serialize)]
27///
28/// Websocket request structure
29///
30pub struct Request {
31  a: RequestActions,
32  v: RequestData,
33}
34
35impl Request {
36  fn new(action: RequestActions, value: RequestData) -> Request {
37    Request {
38      a: action,
39      v: value,
40    }
41  }
42
43  ///
44  /// Subscribe to a list of instrument tokens
45  ///
46  pub fn subscribe(instrument_tokens: Vec<u32>) -> Request {
47    Request::new(
48      RequestActions::Subscribe,
49      RequestData::InstrumentTokens(instrument_tokens),
50    )
51  }
52
53  ///
54  /// Subscribe to a list of instrument tokens with mode
55  ///
56  pub fn mode(mode: Mode, instrument_tokens: Vec<u32>) -> Request {
57    Request::new(
58      RequestActions::Mode,
59      RequestData::InstrumentTokensWithMode(mode, instrument_tokens),
60    )
61  }
62
63  ///
64  /// Unsubscribe from a list of instrument tokens
65  ///
66  pub fn unsubscribe(instrument_tokens: Vec<u32>) -> Request {
67    Request::new(
68      RequestActions::Unsubscribe,
69      RequestData::InstrumentTokens(instrument_tokens),
70    )
71  }
72}
73
74impl ToString for Request {
75  fn to_string(&self) -> String {
76    serde_json::to_string(self)
77      .expect("failed to serialize TickerInput to JSON")
78  }
79}