Skip to main content

ek_data/
subscribe_request.rs

1//! 订阅请求(`object.py:507-518`)。
2
3use crate::constant::Exchange;
4use crate::symbol::{vt_symbol, SymbolError};
5use std::str::FromStr;
6
7/// 发往网关的行情订阅请求。
8#[derive(Debug, Clone, PartialEq, Eq, Default)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct SubscribeRequest {
11    /// 合约代码
12    pub symbol: String,
13    /// 交易所
14    pub exchange: Exchange,
15}
16
17impl SubscribeRequest {
18    /// 由 `vt_symbol` 解折构造(`extract_vt_symbol` 语义)。
19    pub fn from_vt_symbol(vt: &str) -> Result<Self, SymbolError> {
20        crate::symbol::parse_vt_symbol(vt).map(|(symbol, exchange)| Self { symbol, exchange })
21    }
22
23    /// `en_symbol`(派生方法)。
24    pub fn en_symbol(&self) -> String {
25        vt_symbol(&self.symbol, self.exchange)
26    }
27}
28
29impl FromStr for SubscribeRequest {
30    type Err = SymbolError;
31
32    fn from_str(s: &str) -> Result<Self, Self::Err> {
33        Self::from_vt_symbol(s)
34    }
35}