48 lines
1.1 KiB
Rust
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(())
|
|
}
|