use std::error::Error;
use tracing::{error, info};
use tradier::utils::logger::setup_logger;
use tradier::wssession::AccountSession;
use tradier::wssession::{MarketSession, MarketSessionFilter, MarketSessionPayload};
use tradier::Config;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
setup_logger();
let config = Config::new();
loop {
match MarketSession::new(&config).await {
Ok(market_session) => {
info!(
"Market streaming wssession created with id: {}",
market_session.get_session_id()
);
let symbols = ["AAPL".to_string(), "MSFT".to_string()];
let payload = MarketSessionPayload::builder()
.symbols(&symbols)
.filters(&[MarketSessionFilter::QUOTE, MarketSessionFilter::TRADE])
.session_id(market_session.get_session_id())
.linebreak(true)
.valid_only(true)
.build();
if let Err(e) = market_session.ws_stream(payload).await {
error!("Streaming error: {}. Reconnecting...", e);
}
}
Err(e) => {
error!(
"Failed to create market streaming wssession: {}. Retrying...",
e
);
}
}
match AccountSession::new(&config).await {
Ok(account_session) => {
info!(
"Account wssession created with id: {}",
account_session.get_session_id()
);
}
Err(e) => {
error!("Failed to create account wssession: {}.", e);
}
}
tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
}
}