summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorJomar Milan <jomarm@jomarm.com>2026-06-07 23:40:15 -0700
committerJomar Milan <jomarm@jomarm.com>2026-06-07 23:40:15 -0700
commita01f114a641121c77ab80fe43b0f3770458f3afc (patch)
tree07f10268e848cfd71c048eb02cd2be4a920ffca5 /src/main.rs
parenta1746f7c30519abc2f3a293a8f02cc0b2015804d (diff)
Use RwLock for sessions in app state
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs
index b157b71..a09dd84 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -14,7 +14,7 @@ use axum::{Json, Router};
use rust_embed::Embed;
use std::collections::HashMap;
use std::net::SocketAddr;
-use std::sync::{Arc, Mutex};
+use std::sync::{Arc, Mutex, RwLock};
use std::time::{SystemTime, UNIX_EPOCH};
#[derive(Embed)]
@@ -22,13 +22,13 @@ use std::time::{SystemTime, UNIX_EPOCH};
struct EmbedAsset;
struct AppState {
- sessions: Mutex<HashMap<String, Session>>,
+ sessions: RwLock<HashMap<String, Session>>,
}
impl AppState {
fn new() -> Self {
AppState {
- sessions: Mutex::new(HashMap::new()),
+ sessions: RwLock::new(HashMap::new()),
}
}
}
@@ -59,7 +59,7 @@ fn serve_template(template: impl Template) -> Response {
}
async fn serve_index(State(state): State<Arc<AppState>>) -> Response {
- let sessions = state.sessions.lock().unwrap();
+ let sessions = state.sessions.read().unwrap();
serve_template(IndexTemplate {
sessions: &sessions,
})
@@ -85,7 +85,7 @@ async fn visit_session(
) -> Response {
let passcode = query.get("passcode");
- let sessions = state.sessions.lock().unwrap();
+ let sessions = state.sessions.read().unwrap();
match sessions.get(&id) {
Some(session) => match passcode {
@@ -110,7 +110,7 @@ async fn create_session(
.unwrap_or(675603000)
.to_string();
- let mut sessions = state.sessions.lock().unwrap();
+ let mut sessions = state.sessions.write().unwrap();
let session = Session::new(name, passcode.clone());
sessions.insert(id, session);
@@ -119,7 +119,7 @@ async fn create_session(
}
async fn serve_hands(Path(id): Path<String>, State(state): State<Arc<AppState>>) -> Response {
- let sessions = state.sessions.lock().unwrap();
+ let sessions = state.sessions.read().unwrap();
match sessions.get(&id) {
Some(session) => Json(session.hands.keys().collect::<Vec<_>>()).into_response(),
@@ -132,7 +132,7 @@ async fn update_hands(
State(state): State<Arc<AppState>>,
Json(payload): Json<HashMap<String, Vec<HandObject>>>,
) -> Response {
- let mut sessions = state.sessions.lock().unwrap();
+ let mut sessions = state.sessions.write().unwrap();
match sessions.get_mut(&id) {
Some(session) => {