#[allow(unused_imports)]
use std::fs::create_dir_all;
#[allow(unused_imports)]
use std::path::Path;
use std::sync::mpsc::Sender;
pub use ffi::*;
pub type UniquePtr<T> = cxx::UniquePtr<T>;
pub const TORA_TSTP_EXD_COMM: u8 = '0' as u8;
pub const TORA_TSTP_EXD_SSE: u8 = '1' as u8;
pub const TORA_TSTP_EXD_SZSE: u8 = '2' as u8;
pub const TORA_TSTP_EXD_HK: u8 = '3' as u8;
pub const TORA_TSTP_AM_Password: u8 = '0' as u8;
pub const TORA_TSTP_AM_FingerPrint: u8 = '1' as u8;
pub const TORA_TSTP_AM_CertInfo: u8 = '2' as u8;
pub const TORA_TSTP_MST_TCP: u8 = '0' as u8;
pub const TORA_TSTP_MST_UDP: u8 = '1' as u8;
pub const TORA_TSTP_MST_MCAST: u8 = '2' as u8;
pub const TORA_TSTP_MST_DMA: u8 = '3' as u8;
pub const TORA_TSTP_MST_PROXY: u8 = '4' as u8;
pub const TORA_TSTP_UTYPE_BrokerUser: u8 = '0' as u8;
pub const TORA_TSTP_UTYPE_SuperUser: u8 = '1' as u8;
pub const TORA_TSTP_UTYPE_Investor: u8 = '2' as u8;
pub const TORA_TSTP_LACT_UserID: u8 = '0' as u8;
pub const TORA_TSTP_LACT_AccountID: u8 = '1' as u8;
pub const TORA_TSTP_LACT_SHAStock: u8 = '2' as u8;
pub const TORA_TSTP_LACT_SZAStock: u8 = '3' as u8;
pub const TORA_TSTP_LACT_SHBStock: u8 = '4' as u8;
pub const TORA_TSTP_LACT_SZBStock: u8 = '5' as u8;
pub const TORA_TSTP_LACT_ThreeNewBoardA: u8 = '6' as u8;
pub const TORA_TSTP_LACT_ThreeNewBoardB: u8 = '7' as u8;
pub const TORA_TSTP_LACT_HKStock: u8 = '8' as u8;
pub const TORA_TSTP_LACT_UnifiedUserID: u8 = '9' as u8;
pub const TORA_TSTP_MKST_MarketData: u8 = 'M' as u8;
pub const TORA_TSTP_MKST_Index: u8 = 'I' as u8;
pub const TORA_TSTP_MKST_Transaction: u8 = 'T' as u8;
pub const TORA_TSTP_MKST_OrderDetail: u8 = 'O' as u8;
pub const TORA_TSTP_MKST_PHMarketData: u8 = 'H' as u8;
pub const TORA_TSTP_MKST_PHTransaction: u8 = 'P' as u8;
pub const TORA_TSTP_MKST_ResendTransaction: u8 = 'R' as u8;
pub const TORA_TSTP_MKST_ResendOrderDetail: u8 = 'D' as u8;
pub const TORA_TSTP_MKST_XTSMarketData: u8 = 'X' as u8;
pub const TORA_TSTP_MKST_XTSTick: u8 = 'K' as u8;
pub const TORA_TSTP_MKST_BondMarketData: u8 = 'U' as u8;
pub const TORA_TSTP_MKST_BondTransaction: u8 = 'W' as u8;
pub const TORA_TSTP_MKST_BondOrderDetail: u8 = 'V' as u8;
pub const TORA_TSTP_MKST_NGTSTick: u8 = 'N' as u8;
pub const TORA_TSTP_MKST_IOPV: u8 = 'Q' as u8;
pub const TORA_TSTP_MKST_ExIndex: u8 = 'E' as u8;
pub const TORA_TSTP_LOT_Market: u8 = '1' as u8;
pub const TORA_TSTP_LOT_Limit: u8 = '2' as u8;
pub const TORA_TSTP_LOT_HomeBest: u8 = '3' as u8;
pub const TORA_TSTP_LSD_Buy: u8 = '1' as u8;
pub const TORA_TSTP_LSD_Sell: u8 = '2' as u8;
pub const TORA_TSTP_LSD_Borrow: u8 = '3' as u8;
pub const TORA_TSTP_LSD_Lend: u8 = '4' as u8;
pub const TORA_TSTP_ECT_Fill: u8 = '1' as u8;
pub const TORA_TSTP_ECT_Cancel: u8 = '2' as u8;
pub const TORA_TSTP_ECT_Unknown: u8 = 'N' as u8;
pub const TORA_TSTP_LOS_Add: u8 = 'A' as u8;
pub const TORA_TSTP_LOS_Delete: u8 = 'D' as u8;
pub const TORA_TSTP_MSST_PreOpen: u8 = '0' as u8;
pub const TORA_TSTP_MSST_CallAuction: u8 = '1' as u8;
pub const TORA_TSTP_MSST_Continous: u8 = '2' as u8;
pub const TORA_TSTP_MSST_Pause: u8 = '3' as u8;
pub const TORA_TSTP_MSST_Suspend: u8 = '4' as u8;
pub const TORA_TSTP_MSST_LongSuspend: u8 = '5' as u8;
pub const TORA_TSTP_MSST_UndulationInt: u8 = '6' as u8;
pub const TORA_TSTP_MSST_CircuitBreak: u8 = '7' as u8;
pub const TORA_TSTP_MSST_CircuitBreakU: u8 = '8' as u8;
pub const TORA_TSTP_MSST_Close: u8 = '9' as u8;
pub const TORA_TSTP_MSST_Other: u8 = 'a' as u8;
pub const TORA_TSTP_MSST_CloseCallAuction: u8 = 'b' as u8;
pub const TORA_TSTP_MSST_CallMatch: u8 = 'c' as u8;
pub const TORA_TSTP_MSST_PostContinous: u8 = 'd' as u8;
pub const TORA_TSTP_MSST_PostClose: u8 = 'e' as u8;
pub const TORA_TSTP_MSST_PrePostOpen: u8 = 'f' as u8;
pub const TORA_TSTP_MSST_Unlisted: u8 = 'g' as u8;
pub const TORA_TSTP_TBSF_Buy: u8 = 'B' as u8;
pub const TORA_TSTP_TBSF_Sell: u8 = 'S' as u8;
pub const TORA_TSTP_TBSF_Unknown: u8 = 'N' as u8;
pub const TORA_TSTP_LTT_Add: u8 = 'A' as u8;
pub const TORA_TSTP_LTT_Delete: u8 = 'D' as u8;
pub const TORA_TSTP_LTT_Status: u8 = 'S' as u8;
pub const TORA_TSTP_LTT_Trade: u8 = 'T' as u8;
unsafe impl Send for Lev2MdApi {}
unsafe impl Sync for Lev2MdApi {}
impl Lev2MdApi {
pub fn CreateLev2MdApiAndSpi(tx: Sender<Lev2MdSpiMsg>, md_sub_mode: u8, cached_mode: bool) -> UniquePtr<Lev2MdApi> {
CreateLev2MdApi(Box::new(Lev2MdSpi { tx }), md_sub_mode, cached_mode)
}
}
#[derive(Debug, Clone)]
pub enum Lev2MdSpiMsg {
OnFrontConnected,
OnFrontDisconnected(i32),
OnRspError(Box<RspInfoField>, i32, bool),
OnRspUserLogin(Box<RspUserLoginField>, Box<RspInfoField>, i32, bool),
OnRspUserLogout(Box<UserLogoutField>, Box<RspInfoField>, i32, bool),
OnRspSubMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubIndex(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubIndex(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubPHMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubPHMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubPHTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubPHTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubResendTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubResendTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubResendOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubResendOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubXTSMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubXTSMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubXTSTick(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubXTSTick(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubNGTSTick(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubNGTSTick(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubBondMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubBondMarketData(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubBondTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubBondTransaction(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubBondOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubBondOrderDetail(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspSubIOPV(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRspUnSubIOPV(Box<SpecificSecurityField>, Box<RspInfoField>, i32, bool),
OnRtnMarketData(Box<Lev2MarketDataField>, i32, Vec<i32>, i32, Vec<i32>),
OnRtnIndex(Box<Lev2IndexField>),
OnRtnTransaction(Box<Lev2TransactionField>),
OnRtnOrderDetail(Box<Lev2OrderDetailField>),
OnRtnPHMarketData(Box<Lev2PHMarketDataField>, i32, Vec<i32>, i32, Vec<i32>),
OnRtnPHTransaction(Box<Lev2PHTransactionField>),
OnRtnResendTransaction(Box<Lev2ResendTransactionField>),
OnRtnResendOrderDetail(Box<Lev2ResendOrderDetailField>),
OnRtnXTSMarketData(Box<Lev2XTSMarketDataField>, i32, Vec<i32>, i32, Vec<i32>),
OnRtnXTSTick(Box<Lev2XTSTickField>),
OnRtnNGTSTick(Box<Lev2NGTSTickField>),
OnRtnBondMarketData(Box<Lev2BondMarketDataField>, i32, Vec<i32>, i32, Vec<i32>),
OnRtnBondTransaction(Box<Lev2BondTransactionField>),
OnRtnBondOrderDetail(Box<Lev2BondOrderDetailField>),
OnRtnIOPV(Box<Lev2IOPVField>),
}
pub struct Lev2MdSpi {
tx: Sender<Lev2MdSpiMsg>,
}
impl Lev2MdSpi {
pub fn OnFrontConnected(&self) { self.tx.send(Lev2MdSpiMsg::OnFrontConnected).ok(); }
pub fn OnFrontDisconnected(&self, nReason: i32) { self.tx.send(Lev2MdSpiMsg::OnFrontDisconnected(nReason)).ok(); }
pub fn OnRspError(&self, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspError(Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUserLogin(&self, pRspUserLogin: RspUserLoginField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUserLogin(Box::new(pRspUserLogin), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUserLogout(&self, pUserLogout: UserLogoutField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUserLogout(Box::new(pUserLogout), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubIndex(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubIndex(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubIndex(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubIndex(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubPHMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubPHMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubPHMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubPHMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubPHTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubPHTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubPHTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubPHTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubResendTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubResendTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubResendTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubResendTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubResendOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubResendOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubResendOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubResendOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubXTSMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubXTSMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubXTSMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubXTSMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubXTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubXTSTick(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubXTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubXTSTick(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubNGTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubNGTSTick(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubNGTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubNGTSTick(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubBondMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubBondMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubBondMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubBondMarketData(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubBondTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubBondTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubBondTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubBondTransaction(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubBondOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubBondOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubBondOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubBondOrderDetail(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubIOPV(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspSubIOPV(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRspUnSubIOPV(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(Lev2MdSpiMsg::OnRspUnSubIOPV(Box::new(pSpecificSecurity), Box::new(pRspInfo), nRequestID, bIsLast)).ok(); }
pub fn OnRtnMarketData(&self, pMarketData: Lev2MarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>) { self.tx.send(Lev2MdSpiMsg::OnRtnMarketData(Box::new(pMarketData), FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum, FirstLevelSellOrderVolumes)).ok(); }
pub fn OnRtnIndex(&self, pIndex: Lev2IndexField) { self.tx.send(Lev2MdSpiMsg::OnRtnIndex(Box::new(pIndex))).ok(); }
pub fn OnRtnTransaction(&self, pTransaction: Lev2TransactionField) { self.tx.send(Lev2MdSpiMsg::OnRtnTransaction(Box::new(pTransaction))).ok(); }
pub fn OnRtnOrderDetail(&self, pOrderDetail: Lev2OrderDetailField) { self.tx.send(Lev2MdSpiMsg::OnRtnOrderDetail(Box::new(pOrderDetail))).ok(); }
pub fn OnRtnPHMarketData(&self, pPHMarketData: Lev2PHMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>) { self.tx.send(Lev2MdSpiMsg::OnRtnPHMarketData(Box::new(pPHMarketData), FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum, FirstLevelSellOrderVolumes)).ok(); }
pub fn OnRtnPHTransaction(&self, pTransaction: Lev2PHTransactionField) { self.tx.send(Lev2MdSpiMsg::OnRtnPHTransaction(Box::new(pTransaction))).ok(); }
pub fn OnRtnResendTransaction(&self, pTransaction: Lev2ResendTransactionField) { self.tx.send(Lev2MdSpiMsg::OnRtnResendTransaction(Box::new(pTransaction))).ok(); }
pub fn OnRtnResendOrderDetail(&self, pOrderDetail: Lev2ResendOrderDetailField) { self.tx.send(Lev2MdSpiMsg::OnRtnResendOrderDetail(Box::new(pOrderDetail))).ok(); }
pub fn OnRtnXTSMarketData(&self, pMarketData: Lev2XTSMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>) { self.tx.send(Lev2MdSpiMsg::OnRtnXTSMarketData(Box::new(pMarketData), FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum, FirstLevelSellOrderVolumes)).ok(); }
pub fn OnRtnXTSTick(&self, pTick: Lev2XTSTickField) { self.tx.send(Lev2MdSpiMsg::OnRtnXTSTick(Box::new(pTick))).ok(); }
pub fn OnRtnNGTSTick(&self, pTick: Lev2NGTSTickField) { self.tx.send(Lev2MdSpiMsg::OnRtnNGTSTick(Box::new(pTick))).ok(); }
pub fn OnRtnBondMarketData(&self, pMarketData: Lev2BondMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>) { self.tx.send(Lev2MdSpiMsg::OnRtnBondMarketData(Box::new(pMarketData), FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum, FirstLevelSellOrderVolumes)).ok(); }
pub fn OnRtnBondTransaction(&self, pTransaction: Lev2BondTransactionField) { self.tx.send(Lev2MdSpiMsg::OnRtnBondTransaction(Box::new(pTransaction))).ok(); }
pub fn OnRtnBondOrderDetail(&self, pOrderDetail: Lev2BondOrderDetailField) { self.tx.send(Lev2MdSpiMsg::OnRtnBondOrderDetail(Box::new(pOrderDetail))).ok(); }
pub fn OnRtnIOPV(&self, pIOPV: Lev2IOPVField) { self.tx.send(Lev2MdSpiMsg::OnRtnIOPV(Box::new(pIOPV))).ok(); }
}
#[cxx::bridge(namespace = "tora_lev2md")]
mod ffi {
extern "Rust" {
type Lev2MdSpi;
pub fn OnFrontConnected(&self);
pub fn OnFrontDisconnected(&self, nReason: i32);
pub fn OnRspError(&self, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUserLogin(&self, pRspUserLogin: RspUserLoginField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUserLogout(&self, pUserLogout: UserLogoutField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubIndex(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubIndex(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubPHMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubPHMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubPHTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubPHTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubResendTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubResendTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubResendOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubResendOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubXTSMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubXTSMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubXTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubXTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubNGTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubNGTSTick(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubBondMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubBondMarketData(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubBondTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubBondTransaction(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubBondOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubBondOrderDetail(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubIOPV(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspUnSubIOPV(&self, pSpecificSecurity: SpecificSecurityField, pRspInfo: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRtnMarketData(&self, pMarketData: Lev2MarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>);
pub fn OnRtnIndex(&self, pIndex: Lev2IndexField);
pub fn OnRtnTransaction(&self, pTransaction: Lev2TransactionField);
pub fn OnRtnOrderDetail(&self, pOrderDetail: Lev2OrderDetailField);
pub fn OnRtnPHMarketData(&self, pPHMarketData: Lev2PHMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>);
pub fn OnRtnPHTransaction(&self, pTransaction: Lev2PHTransactionField);
pub fn OnRtnResendTransaction(&self, pTransaction: Lev2ResendTransactionField);
pub fn OnRtnResendOrderDetail(&self, pOrderDetail: Lev2ResendOrderDetailField);
pub fn OnRtnXTSMarketData(&self, pMarketData: Lev2XTSMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>);
pub fn OnRtnXTSTick(&self, pTick: Lev2XTSTickField);
pub fn OnRtnNGTSTick(&self, pTick: Lev2NGTSTickField);
pub fn OnRtnBondMarketData(&self, pMarketData: Lev2BondMarketDataField, FirstLevelBuyNum: i32, FirstLevelBuyOrderVolumes: Vec<i32>, FirstLevelSellNum: i32, FirstLevelSellOrderVolumes: Vec<i32>);
pub fn OnRtnBondTransaction(&self, pTransaction: Lev2BondTransactionField);
pub fn OnRtnBondOrderDetail(&self, pOrderDetail: Lev2BondOrderDetailField);
pub fn OnRtnIOPV(&self, pIOPV: Lev2IOPVField);
}
unsafe extern "C++" {
include!("tora-rs/wrapper/include/Lev2MdApi.h");
type Lev2MdApi;
fn CreateLev2MdApi(spi: Box<Lev2MdSpi>, md_sub_mode: u8, cached_mode: bool) -> UniquePtr<Lev2MdApi>;
fn GetApiVersion(&self) -> String;
fn Init(&self, cpuCores: String);
fn Join(&self) -> i32;
fn RegisterFront(&self, pszFrontAddress: String);
fn RegisterNameServer(&self, pszNsAddress: String);
fn RegisterMulticast(&self, pszMulticastAddress: String, pszInterfaceIP: String, pszSourceIp: String, pInterfaceName: String, rxqCapacity: i32, bEFVI: bool);
fn SubscribeMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeIndex(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeIndex(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribePHMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribePHMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribePHTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribePHTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeResendTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeResendTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeResendOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeResendOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeXTSMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeXTSMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeXTSTick(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeXTSTick(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeNGTSTick(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeNGTSTick(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeBondMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeBondMarketData(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeBondTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeBondTransaction(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeBondOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeBondOrderDetail(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn SubscribeIOPV(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn UnSubscribeIOPV(&self, ppSecurityID: Vec<String>, ExchageID: u8) -> i32;
fn ReqUserLogin(&self, pReqUserLoginField: ReqUserLoginField, nRequestID: i32) -> i32;
fn ReqUserLogout(&self, pUserLogout: UserLogoutField, nRequestID: i32) -> i32;
}
#[derive(Debug, Clone, Default)]
struct FensUserInfoField {
is_null: bool,
LogInAccount: String,
LogInAccountType: u8,
}
#[derive(Debug, Clone, Default)]
struct ReqUserLoginField {
is_null: bool,
LogInAccount: String,
LogInAccountType: u8,
Password: String,
UserProductInfo: String,
InterfaceProductInfo: String,
ProtocolInfo: String,
MacAddress: String,
Mobile: String,
InnerIPAddress: String,
Lang: Vec<u8>,
TerminalInfo: String,
GWMacAddress: String,
GWInnerIPAddress: String,
GWOuterIPAddress: String,
DepartmentID: String,
HDSerial: String,
AuthMode: u8,
DeviceID: String,
CertSerial: String,
OuterIPAddress: String,
DynamicPassword: String,
OuterPort: i32,
}
#[derive(Debug, Clone, Default)]
struct RspUserLoginField {
is_null: bool,
LoginTime: String,
LogInAccount: String,
LogInAccountType: u8,
SystemName: String,
FrontID: i32,
SessionID: i32,
MaxOrderRef: String,
PrivateFlowCount: i32,
PublicFlowCount: i32,
TradingDay: String,
UserID: String,
UserName: String,
UserType: u8,
DepartmentID: String,
InnerIPAddress: String,
MacAddress: String,
HDSerial: String,
OrderInsertCommFlux: i32,
PasswordUpdatePeriod: i32,
PasswordRemainDays: i32,
NeedUpdatePassword: i32,
OrderActionCommFlux: i32,
Mobile: String,
OuterIPAddress: String,
CertSerial: String,
OuterPort: i32,
}
#[derive(Debug, Clone, Default)]
struct RspInfoField {
is_null: bool,
ErrorID: i32,
ErrorMsg: String,
}
#[derive(Debug, Clone, Default)]
struct UserLogoutField {
is_null: bool,
UserID: String,
}
#[derive(Debug, Clone, Default)]
struct SpecificSecurityField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
}
#[derive(Debug, Clone, Default)]
struct Lev2MarketDataField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
PreClosePrice: f64,
OpenPrice: f64,
NumTrades: i64,
TotalVolumeTrade: i64,
TotalValueTrade: f64,
TotalBidVolume: i64,
AvgBidPrice: f64,
TotalAskVolume: i64,
AvgAskPrice: f64,
HighestPrice: f64,
LowestPrice: f64,
LastPrice: f64,
BidPrice1: f64,
BidVolume1: i64,
AskPrice1: f64,
AskVolume1: i64,
AskPrice2: f64,
AskVolume2: i64,
AskPrice3: f64,
AskVolume3: i64,
BidPrice2: f64,
BidVolume2: i64,
BidPrice3: f64,
BidVolume3: i64,
AskPrice4: f64,
AskVolume4: i64,
AskPrice5: f64,
AskVolume5: i64,
BidPrice4: f64,
BidVolume4: i64,
BidPrice5: f64,
BidVolume5: i64,
AskPrice6: f64,
AskVolume6: i64,
AskPrice7: f64,
AskVolume7: i64,
BidPrice6: f64,
BidVolume6: i64,
BidPrice7: f64,
BidVolume7: i64,
AskPrice8: f64,
AskVolume8: i64,
AskPrice9: f64,
AskVolume9: i64,
BidPrice8: f64,
BidVolume8: i64,
BidPrice9: f64,
BidVolume9: i64,
BidPrice10: f64,
BidVolume10: i64,
AskPrice10: f64,
AskVolume10: i64,
Info1: i32,
Info2: i32,
Info3: i32,
UpperLimitPrice: f64,
LowerLimitPrice: f64,
ClosePrice: f64,
MDSecurityStat: u8,
TotalBidNumber: i32,
TotalOfferNumber: i32,
BidTradeMaxDuration: i32,
OfferTradeMaxDuration: i32,
IOPV: f64,
Ask1NumOrders: i32,
Bid1NumOrders: i32,
Ask2NumOrders: i32,
Bid2NumOrders: i32,
Ask3NumOrders: i32,
Bid3NumOrders: i32,
Ask4NumOrders: i32,
Bid4NumOrders: i32,
Ask5NumOrders: i32,
Bid5NumOrders: i32,
Ask6NumOrders: i32,
Bid6NumOrders: i32,
Ask7NumOrders: i32,
Bid7NumOrders: i32,
Ask8NumOrders: i32,
Bid8NumOrders: i32,
Ask9NumOrders: i32,
Bid9NumOrders: i32,
Ask10NumOrders: i32,
Bid10NumOrders: i32,
WithdrawBuyNumber: i32,
WithdrawBuyAmount: i64,
WithdrawBuyMoney: f64,
WithdrawSellNumber: i32,
WithdrawSellAmount: i64,
WithdrawSellMoney: f64,
}
#[derive(Debug, Clone, Default)]
struct Lev2IndexField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
DataTimeStamp: i32,
PreCloseIndex: f64,
OpenIndex: f64,
HighIndex: f64,
LowIndex: f64,
LastIndex: f64,
Turnover: f64,
TotalVolumeTraded: i64,
Info1: i32,
Info2: i32,
Info3: i32,
CloseIndex: f64,
}
#[derive(Debug, Clone, Default)]
struct Lev2TransactionField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
TradeTime: i32,
TradePrice: f64,
TradeVolume: i64,
ExecType: u8,
MainSeq: i32,
SubSeq: i64,
BuyNo: i64,
SellNo: i64,
Info1: i32,
Info2: i32,
Info3: i32,
TradeBSFlag: u8,
BizIndex: i64,
}
#[derive(Debug, Clone, Default)]
struct Lev2OrderDetailField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
OrderTime: i32,
Price: f64,
Volume: i64,
Side: u8,
OrderType: u8,
MainSeq: i32,
SubSeq: i32,
Info1: i32,
Info2: i32,
Info3: i32,
OrderNO: i64,
OrderStatus: u8,
BizIndex: i64,
}
#[derive(Debug, Clone, Default)]
struct Lev2PHMarketDataField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
ClosePrice: f64,
MDSecurityStat: u8,
NumTrades: i64,
TotalVolumeTrade: i64,
TotalValueTrade: f64,
TotalBidVolume: i64,
TotalAskVolume: i64,
WithdrawBuyNumber: i64,
WithdrawBuyAmount: i64,
WithdrawSellNumber: i64,
WithdrawSellAmount: i64,
BidOrderQty: i64,
BidNumOrders: i64,
AskOrderQty: i64,
AskNumOrders: i64,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2PHTransactionField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
TradeTime: i32,
TradePrice: f64,
TradeVolume: i64,
TradeMoney: f64,
ExecType: u8,
MainSeq: i32,
SubSeq: i64,
BuyNo: i64,
SellNo: i64,
Info1: i32,
Info2: i32,
Info3: i32,
TradeBSFlag: u8,
}
#[derive(Debug, Clone, Default)]
struct Lev2ResendTransactionField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
TradeTime: i32,
TradePrice: f64,
TradeVolume: i64,
ExecType: u8,
MainSeq: i32,
SubSeq: i64,
BuyNo: i64,
SellNo: i64,
Info1: i32,
Info2: i32,
Info3: i32,
TradeBSFlag: u8,
BizIndex: i64,
}
#[derive(Debug, Clone, Default)]
struct Lev2ResendOrderDetailField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
OrderTime: i32,
Price: f64,
Volume: i64,
Side: u8,
OrderType: u8,
MainSeq: i32,
SubSeq: i32,
Info1: i32,
Info2: i32,
Info3: i32,
OrderNO: i64,
OrderStatus: u8,
BizIndex: i64,
}
#[derive(Debug, Clone, Default)]
struct Lev2XTSMarketDataField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
PreClosePrice: f64,
OpenPrice: f64,
NumTrades: i64,
TotalVolumeTrade: i64,
TotalValueTrade: f64,
TotalBidVolume: i64,
AvgBidPrice: f64,
TotalAskVolume: i64,
AvgAskPrice: f64,
HighestPrice: f64,
LowestPrice: f64,
LastPrice: f64,
BidPrice1: f64,
BidVolume1: i64,
Bid1NumOrders: i32,
AskPrice1: f64,
AskVolume1: i64,
Ask1NumOrders: i32,
AskPrice2: f64,
AskVolume2: i64,
Ask2NumOrders: i32,
AskPrice3: f64,
AskVolume3: i64,
Ask3NumOrders: i32,
BidPrice2: f64,
BidVolume2: i64,
Bid2NumOrders: i32,
BidPrice3: f64,
BidVolume3: i64,
Bid3NumOrders: i32,
AskPrice4: f64,
AskVolume4: i64,
Ask4NumOrders: i32,
AskPrice5: f64,
AskVolume5: i64,
Ask5NumOrders: i32,
BidPrice4: f64,
BidVolume4: i64,
Bid4NumOrders: i32,
BidPrice5: f64,
BidVolume5: i64,
Bid5NumOrders: i32,
AskPrice6: f64,
AskVolume6: i64,
Ask6NumOrders: i32,
AskPrice7: f64,
AskVolume7: i64,
Ask7NumOrders: i32,
BidPrice6: f64,
BidVolume6: i64,
Bid6NumOrders: i32,
BidPrice7: f64,
BidVolume7: i64,
Bid7NumOrders: i32,
AskPrice8: f64,
AskVolume8: i64,
Ask8NumOrders: i32,
AskPrice9: f64,
AskVolume9: i64,
Ask9NumOrders: i32,
BidPrice8: f64,
BidVolume8: i64,
Bid8NumOrders: i32,
BidPrice9: f64,
BidVolume9: i64,
Bid9NumOrders: i32,
BidPrice10: f64,
BidVolume10: i64,
Bid10NumOrders: i32,
AskPrice10: f64,
AskVolume10: i64,
Ask10NumOrders: i32,
ClosePrice: f64,
MDSecurityStat: u8,
TotalBidNumber: i32,
TotalOfferNumber: i32,
BidTradeMaxDuration: i32,
OfferTradeMaxDuration: i32,
WithdrawBuyNumber: i32,
WithdrawBuyAmount: i64,
WithdrawBuyMoney: f64,
WithdrawSellNumber: i32,
WithdrawSellAmount: i64,
WithdrawSellMoney: f64,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2XTSTickField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
MainSeq: i32,
SubSeq: i64,
TickTime: i32,
TickType: u8,
BuyNo: i64,
SellNo: i64,
Price: f64,
Volume: i64,
TradeMoney: f64,
Side: u8,
TradeBSFlag: u8,
MDSecurityStat: u8,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2NGTSTickField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
MainSeq: i32,
SubSeq: i64,
TickTime: i32,
TickType: u8,
BuyNo: i64,
SellNo: i64,
Price: f64,
Volume: i64,
TradeMoney: f64,
Side: u8,
TradeBSFlag: u8,
MDSecurityStat: u8,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2BondMarketDataField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
PreClosePrice: f64,
OpenPrice: f64,
AvgPreClosePrice: f64,
NumTrades: i64,
TotalVolumeTrade: i64,
TotalValueTrade: f64,
AuctionVolumeTrade: i64,
AuctionValueTrade: f64,
TotalBidVolume: i64,
AvgBidPrice: f64,
TotalAskVolume: i64,
AvgAskPrice: f64,
HighestPrice: f64,
LowestPrice: f64,
LastPrice: f64,
AuctionLastPrice: f64,
AvgPrice: f64,
PriceUpDown1: f64,
PriceUpDown2: f64,
ClosePrice: f64,
MDSecurityStat: u8,
BidPrice1: f64,
BidVolume1: i64,
Bid1NumOrders: i32,
AskPrice1: f64,
AskVolume1: i64,
Ask1NumOrders: i32,
AskPrice2: f64,
AskVolume2: i64,
Ask2NumOrders: i32,
AskPrice3: f64,
AskVolume3: i64,
Ask3NumOrders: i32,
BidPrice2: f64,
BidVolume2: i64,
Bid2NumOrders: i32,
BidPrice3: f64,
BidVolume3: i64,
Bid3NumOrders: i32,
AskPrice4: f64,
AskVolume4: i64,
Ask4NumOrders: i32,
AskPrice5: f64,
AskVolume5: i64,
Ask5NumOrders: i32,
BidPrice4: f64,
BidVolume4: i64,
Bid4NumOrders: i32,
BidPrice5: f64,
BidVolume5: i64,
Bid5NumOrders: i32,
AskPrice6: f64,
AskVolume6: i64,
Ask6NumOrders: i32,
AskPrice7: f64,
AskVolume7: i64,
Ask7NumOrders: i32,
BidPrice6: f64,
BidVolume6: i64,
Bid6NumOrders: i32,
BidPrice7: f64,
BidVolume7: i64,
Bid7NumOrders: i32,
AskPrice8: f64,
AskVolume8: i64,
Ask8NumOrders: i32,
AskPrice9: f64,
AskVolume9: i64,
Ask9NumOrders: i32,
BidPrice8: f64,
BidVolume8: i64,
Bid8NumOrders: i32,
BidPrice9: f64,
BidVolume9: i64,
Bid9NumOrders: i32,
BidPrice10: f64,
BidVolume10: i64,
Bid10NumOrders: i32,
AskPrice10: f64,
AskVolume10: i64,
Ask10NumOrders: i32,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2BondOrderDetailField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
OrderTime: i32,
Price: f64,
Volume: i64,
Side: u8,
OrderType: u8,
MainSeq: i32,
SubSeq: i64,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2BondTransactionField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
TradeTime: i32,
TradePrice: f64,
TradeVolume: i64,
ExecType: u8,
MainSeq: i32,
SubSeq: i64,
BuyNo: i64,
SellNo: i64,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct Lev2IOPVField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
IOPV: f64,
MDSecurityStat: u8,
Info1: i32,
Info2: i32,
Info3: i32,
}
#[derive(Debug, Clone, Default)]
struct ExIndexField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
DataTimeStamp: i32,
PreCloseIndex: f64,
OpenIndex: f64,
HighIndex: f64,
LowIndex: f64,
LastIndex: f64,
Turnover: f64,
TotalVolumeTraded: i64,
CloseIndex: f64,
}
}