ek-data 0.2.8

Trading data contracts for the enkeep ek ecosystem: venue enums, zero-dep epoch-nanosecond time, decimal-exact price rounding, vt-symbol convention, bus event dictionary, tick/bar/order/trade/position/account/contract objects and request objects (Python enkeep_trade trader/object.py + constant.py, faithfully ported).
Documentation
//! 订阅请求(`object.py:507-518`)。

use crate::constant::Exchange;
use crate::symbol::{SymbolError, vt_symbol};
use std::str::FromStr;

/// 发往网关的行情订阅请求。
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SubscribeRequest {
    /// 合约代码
    pub symbol: String,
    /// 交易所
    pub exchange: Exchange,
}

impl SubscribeRequest {
    /// 由 `vt_symbol` 解折构造(`extract_vt_symbol` 语义)。
    pub fn from_vt_symbol(vt: &str) -> Result<Self, SymbolError> {
        crate::symbol::parse_vt_symbol(vt).map(|(symbol, exchange)| Self { symbol, exchange })
    }

    /// `en_symbol`(派生方法)。
    pub fn en_symbol(&self) -> String {
        vt_symbol(&self.symbol, self.exchange)
    }
}

impl FromStr for SubscribeRequest {
    type Err = SymbolError;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        Self::from_vt_symbol(s)
    }
}