use crate::bot::BotOrchestrator; use crate::channels::{VoiceAdapter, WebChannelAdapter}; use crate::config::AppConfig; use crate::tools::ToolApi; use crate::whatsapp::WhatsAppAdapter; use diesel::PgConnection; use redis::Client; use std::sync::Arc; use std::sync::Mutex; pub struct AppState { pub s3_client: Option, pub config: Option, pub conn: Arc>, pub custom_conn: Arc>, pub redis_client: Option>, pub orchestrator: Arc, pub web_adapter: Arc, pub voice_adapter: Arc, pub whatsapp_adapter: Arc, pub tool_api: Arc, } impl Clone for AppState { fn clone(&self) -> Self { Self { s3_client: self.s3_client.clone(), config: self.config.clone(), conn: Arc::clone(&self.conn), custom_conn: Arc::clone(&self.custom_conn), redis_client: self.redis_client.clone(), orchestrator: Arc::clone(&self.orchestrator), web_adapter: Arc::clone(&self.web_adapter), voice_adapter: Arc::clone(&self.voice_adapter), whatsapp_adapter: Arc::clone(&self.whatsapp_adapter), tool_api: Arc::clone(&self.tool_api), } } }