PersonalWebApplication/Server/src/state.rs

29 lines
733 B
Rust
Raw Normal View History

//! 共享应用状态。
//!
//! 采样任务(写)与 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<RwLock<Stats>>,
/// 用户表:启动时构建一次、之后只读,故无需锁,用 `Arc` 共享即可。
pub users: Arc<UserStore>,
}
impl AppState {
pub fn new() -> Self {
Self {
snapshot: Arc::new(RwLock::new(Stats::default())),
users: Arc::new(UserStore::seed()),
}
}
}