kiteticker_async_manager/models/
ticker_message.rs

1use crate::{Order, TextMessage, TickMessage};
2use serde::{Deserialize, Serialize};
3
4use super::text_message::TextMessageType;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7///
8/// Parsed message from websocket
9///
10pub enum TickerMessage {
11  /// Quote packets for subscribed tokens
12  Ticks(Vec<TickMessage>),
13  /// Error response
14  Error(String),
15  /// Order postback
16  OrderPostback(Result<Order, String>),
17  /// Messages and alerts from broker
18  Message(serde_json::Value),
19  /// Websocket closing frame
20  ClosingMessage(serde_json::Value),
21}
22
23impl From<TextMessage> for TickerMessage {
24  fn from(value: TextMessage) -> Self {
25    let message_type: TextMessageType = value.message_type.into();
26    match message_type {
27      TextMessageType::Order => Self::OrderPostback(
28        serde_json::from_value(value.data).map_err(|e| e.to_string()),
29      ),
30      TextMessageType::Error => Self::Error(value.data.to_string()),
31      TextMessageType::Message => Self::Message(value.data),
32    }
33  }
34}