//! 共享应用状态。 //! //! 采样任务(写)与 HTTP handler(读)通过一个被 `RwLock` 保护的 //! `Stats` 快照通信。`AppState` 可廉价 `clone`(内部是 `Arc`)。 use std::sync::Arc; use tokio::sync::RwLock; use crate::auth::UserStore; use crate::monitor::Stats; #[derive(Clone)] pub struct AppState { /// 最新一次采样快照。 pub snapshot: Arc>, /// 用户表:启动时构建一次、之后只读,故无需锁,用 `Arc` 共享即可。 pub users: Arc, } impl AppState { pub fn new() -> Self { Self { snapshot: Arc::new(RwLock::new(Stats::default())), users: Arc::new(UserStore::seed()), } } }