pub mod adjust;
pub mod client;
pub mod config;
pub mod error;
pub mod group;
pub mod intraday;
pub mod models;
pub mod request;
pub mod storage;
pub mod util;
pub use client::{Cell, Client, InstrumentPrices, PricesResult};
pub use config::{Config, IntradaySettings, PriceSettings};
pub use error::{Error, Result, ResultError};
pub use group::{Period, group};
pub use models::{
COLS, COLS_FA, ClosingPrice, Column, Instrument, InstrumentItd, Share, itd_group_cols,
};
use std::collections::HashMap;
impl Client {
pub async fn get_instruments(&self) -> Result<HashMap<String, Instrument>> {
let last_update = self.storage().get_item("tse.lastInstrumentUpdate")?;
if let Some(err) = self.update_instruments().await? {
if last_update.is_empty() {
return Err(Error::FailedRequest {
title: format!("{err:?}"),
detail: String::new(),
});
}
}
let rows = self.storage().get_item("tse.instruments")?;
let mut map = HashMap::new();
if rows.is_empty() {
return Ok(map);
}
for row in rows.split('\n').filter(|r| !r.is_empty()) {
let ins = Instrument::parse(row)?;
map.insert(ins.ins_code.clone(), ins);
}
Ok(map)
}
pub async fn get_intraday_instruments(&self) -> Result<HashMap<String, InstrumentItd>> {
let rows = self.storage().get_item("tse.instruments.intraday")?;
let mut map = HashMap::new();
if rows.is_empty() {
return Ok(map);
}
for row in rows.split('\n').filter(|r| !r.is_empty()) {
let ins = InstrumentItd::parse(row)?;
map.insert(ins.ins_code.clone(), ins);
}
Ok(map)
}
}