use crabllm_core::{Extension, GatewayConfig, Provider, Storage};
use crabllm_provider::ProviderRegistry;
use std::{
collections::HashMap,
sync::{Arc, RwLock},
};
pub struct AppState<S: Storage, P: Provider> {
pub registry: ProviderRegistry<P>,
pub config: GatewayConfig,
pub extensions: Arc<Vec<Box<dyn Extension>>>,
pub storage: Arc<S>,
pub key_map: Arc<RwLock<HashMap<String, String>>>,
}
impl<S: Storage, P: Provider> Clone for AppState<S, P> {
fn clone(&self) -> Self {
Self {
registry: self.registry.clone(),
config: self.config.clone(),
extensions: self.extensions.clone(),
storage: self.storage.clone(),
key_map: self.key_map.clone(),
}
}
}