kiteticker_async_manager/models/
request.rs1use serde::{Deserialize, Serialize};
2
3use crate::Mode;
4
5#[derive(Clone, Debug, Deserialize, Serialize)]
6#[serde(rename_all = "lowercase")]
7enum RequestActions {
11 Subscribe,
12 Unsubscribe,
13 Mode,
14}
15
16#[derive(Clone, Debug, Deserialize, Serialize)]
17#[serde(untagged)]
18enum RequestData {
22 InstrumentTokens(Vec<u32>),
23 InstrumentTokensWithMode(Mode, Vec<u32>),
24}
25
26#[derive(Debug, Clone, Deserialize, Serialize)]
27pub 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 pub fn subscribe(instrument_tokens: Vec<u32>) -> Request {
47 Request::new(
48 RequestActions::Subscribe,
49 RequestData::InstrumentTokens(instrument_tokens),
50 )
51 }
52
53 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 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}