Files
qrust/backend/src/main.rs
2024-01-25 17:16:12 +00:00

48 lines
1.1 KiB
Rust

mod config;
mod data;
mod database;
mod routes;
mod types;
use config::AppConfig;
use data::live::run_data_live;
use dotenv::dotenv;
use routes::run_api;
use std::error::Error;
use tokio::{spawn, sync::broadcast};
use types::{AssetBroadcastMessage, Class};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
dotenv().ok();
log4rs::init_file("log4rs.yaml", Default::default()).unwrap();
let app_config = AppConfig::arc_from_env().await.unwrap();
let mut threads = Vec::new();
let (asset_broadcast_sender, _) = broadcast::channel::<AssetBroadcastMessage>(100);
// Stock Live Data
threads.push(spawn(run_data_live(
Class::UsEquity,
app_config.clone(),
asset_broadcast_sender.subscribe(),
)));
// Crypto Live Data
threads.push(spawn(run_data_live(
Class::Crypto,
app_config.clone(),
asset_broadcast_sender.subscribe(),
)));
// REST API
threads.push(spawn(run_api(app_config.clone(), asset_broadcast_sender)));
for thread in threads {
thread.await??;
}
Ok(())
}