use std::sync::Arc; use dashmap::DashMap; use uuid::Uuid; use common_contracts::observability::TaskProgress; use secrecy::ExposeSecret; use crate::config::AppConfig; use crate::finnhub::FinnhubDataProvider; #[derive(Clone)] pub struct AppState { pub tasks: Arc>, pub config: Arc, pub finnhub_provider: Arc, } impl AppState { pub fn new(config: AppConfig) -> Self { let provider = Arc::new(FinnhubDataProvider::new( config.finnhub_api_url.clone(), config.finnhub_api_key.expose_secret().clone(), )); Self { tasks: Arc::new(DashMap::new()), config: Arc::new(config), finnhub_provider: provider, } } }