use crate::core::config::Config; use dashmap::DashMap; use serde::Serialize; use sqlx::SqlitePool; use std::sync::{Arc, atomic::AtomicUsize}; use tokio::sync::{mpsc, oneshot}; pub type Database = SqlitePool; pub type DeviceCounts = DashMap>; pub type Registry = DashMap<(String, String), RegistryEntry>; pub struct AppState { pub database: Database, pub registry: Arc, pub device_counts: Arc, pub config: Arc, } pub struct RegistryEntry { pub sender: mpsc::Sender, pub in_flight: Arc, } #[derive(Debug, Serialize)] pub struct ExecResult { pub exit_code: i32, pub stdout: String, pub stderr: String, } pub struct PendingExec { pub exec_id: String, pub command: String, pub reply: oneshot::Sender, }