Init repo
This commit is contained in:
43
src/state/mod.rs
Normal file
43
src/state/mod.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::broadcast;
|
||||
|
||||
use crate::{
|
||||
client::ClientManager, database::DbPool, providers::ProviderManager,
|
||||
rate_limiting::RateLimitManager, logging::RequestLogger,
|
||||
models::registry::ModelRegistry,
|
||||
};
|
||||
|
||||
/// Shared application state
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub provider_manager: ProviderManager,
|
||||
pub db_pool: DbPool,
|
||||
pub rate_limit_manager: Arc<RateLimitManager>,
|
||||
pub client_manager: Arc<ClientManager>,
|
||||
pub request_logger: Arc<RequestLogger>,
|
||||
pub model_registry: Arc<ModelRegistry>,
|
||||
pub dashboard_tx: broadcast::Sender<serde_json::Value>,
|
||||
}
|
||||
|
||||
impl AppState {
|
||||
pub fn new(
|
||||
provider_manager: ProviderManager,
|
||||
db_pool: DbPool,
|
||||
rate_limit_manager: RateLimitManager,
|
||||
model_registry: ModelRegistry,
|
||||
) -> Self {
|
||||
let client_manager = Arc::new(ClientManager::new(db_pool.clone()));
|
||||
let (dashboard_tx, _) = broadcast::channel(100);
|
||||
let request_logger = Arc::new(RequestLogger::new(db_pool.clone(), dashboard_tx.clone()));
|
||||
|
||||
Self {
|
||||
provider_manager,
|
||||
db_pool,
|
||||
rate_limit_manager: Arc::new(rate_limit_manager),
|
||||
client_manager,
|
||||
request_logger,
|
||||
model_registry: Arc::new(model_registry),
|
||||
dashboard_tx,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user