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  /// Raw binary frame (when raw-only mode enabled)
14  Raw(Vec<u8>),
15  /// Error response
16  Error(String),
17  /// Order postback
18  OrderPostback(Result<Order, String>),
19  /// Messages and alerts from broker
20  Message(serde_json::Value),
21  /// Websocket closing frame
22  ClosingMessage(serde_json::Value),
23}
24
25impl From<TextMessage> for TickerMessage {
26  fn from(value: TextMessage) -> Self {
27    let message_type: TextMessageType = value.message_type.into();
28    match message_type {
29      TextMessageType::Order => Self::OrderPostback(
30        serde_json::from_value(value.data).map_err(|e| e.to_string()),
31      ),
32      TextMessageType::Error => Self::Error(value.data.to_string()),
33      TextMessageType::Message => Self::Message(value.data),
34    }
35  }
36}