mod kline;
pub use kline::{Kline, KlineData};
mod index_kline;
pub use index_kline::{IndexKline, IndexKlineData};
mod xdxr;
pub use xdxr::*;
mod quotes;
pub use quotes::{QuoteData, SecurityQuotes};
mod security_list;
pub use security_list::{SecurityList, SecurityListData};
mod minute_time;
pub use minute_time::{MinuteTime, MinuteTimeData};
mod transaction;
pub use transaction::{Transaction, TransactionData};
mod finance_info;
pub use finance_info::{FinanceInfo, FinanceInfoData};
mod history_minute_time;
pub use history_minute_time::HistoryMinuteTime;
mod history_transaction;
pub use history_transaction::HistoryTransaction;
mod block_info;
pub use block_info::{
BlockInfoChunk, BlockInfoMeta, BlockRecord, get_block_info, parse_block_content,
};
mod company_info;
pub use company_info::{CompanyInfoCategory, CompanyInfoCategoryItem, CompanyInfoContent};
mod client;
pub use client::Client;
pub fn market_of(code: &str) -> Option<u16> {
match code.as_bytes().first()? {
b'6' => Some(1),
b'0' | b'3' => Some(0),
_ => None,
}
}
pub fn stocks(tcp: &mut crate::tcp::Tcp, market: u16) -> crate::Result<Vec<SecurityListData>> {
use crate::tcp::Tdx;
let count = {
let mut sc = crate::tcp::basic::SecurityCount::new(market);
*sc.recv_parsed(tcp)?
};
let mut all = Vec::with_capacity(count as usize);
let mut start = 0u16;
while (start as usize) < count as usize {
let mut list = SecurityList::new(market, start);
list.recv_parsed(tcp)?;
let n = list.result().len();
if n == 0 {
break;
}
all.extend(list.result().iter().cloned());
start += n as u16;
}
Ok(all)
}
mod industry_mapping;
pub use industry_mapping::{get_industry_info, get_industry_name, get_province_name};
mod concept_mapping;
pub use concept_mapping::{ConceptStock, get_concept_info, get_concept_names, get_concept_stocks};
pub mod validator;
pub use validator::{
DataLocation, Validatable, ValidationLevel, ValidationResult, detect_anomalies,
validate_finance_consistency, validate_kline_continuity,
};