diff --git a/Cargo.lock b/Cargo.lock index a707097..86a4212 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,6 +747,7 @@ version = "0.1.0" dependencies = [ "askama", "axum", + "parking_lot", "rusqlite", "tokio", "tower-http", diff --git a/Cargo.toml b/Cargo.toml index 1e70e1f..86f8dbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2024" [dependencies] askama = "0.14.0" axum = "0.8.6" +parking_lot = "0.12.5" rusqlite = { version = "0.37.0", features = ["bundled"] } tokio = { version = "1.48.0", features = ["full"] } tower-http = { version = "0.6.6", features = ["trace"] } diff --git a/src/main.rs b/src/main.rs index b93ad4d..28fdf90 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use askama::Template; use axum::{ @@ -8,6 +8,7 @@ use axum::{ response::Html, routing::{get, post}, }; +use parking_lot::Mutex; use rusqlite::Connection; use tower_http::trace::TraceLayer; use tower_request_id::{RequestId, RequestIdLayer}; @@ -106,7 +107,7 @@ async fn main() -> Result<(), std::io::Error> { } fn get_foods(conn: &Arc>) -> Vec { - let conn = conn.lock().unwrap(); + let conn = conn.lock(); let mut stmt = conn .prepare( "SELECT id, portion, name, kc_per_serving, target_servings, actual_servings, color FROM food", @@ -132,7 +133,7 @@ fn get_foods(conn: &Arc>) -> Vec { } fn get_sum(conn: &Arc>) -> i32 { - let conn = conn.lock().unwrap(); + let conn = conn.lock(); let mut stmt = conn .prepare("SELECT SUM(kc_per_serving * actual_servings) as kc FROM food") .unwrap(); @@ -149,14 +150,14 @@ async fn root(State(conn): State>>) -> Html { } fn do_increase(conn: &Arc>, id: i32) { - let conn = conn.lock().unwrap(); + let conn = conn.lock(); let mut stmt = conn.prepare("UPDATE food SET actual_servings = (SELECT actual_servings FROM food WHERE id = ?1) + 1 WHERE id = ?1 RETURNING actual_servings").unwrap(); let new: i32 = stmt.query_one((id,), |row| row.get(0)).unwrap(); debug!(id, new_serving_count = new, "increase"); } fn get_food(conn: &Arc>, id: i32) -> Food { - let conn = conn.lock().unwrap(); + let conn = conn.lock(); let mut stmt = conn.prepare("SELECT id, portion, name, kc_per_serving, target_servings, actual_servings, color FROM food WHERE id = ?1").unwrap(); let food = stmt .query_one((id,), |row| { @@ -184,7 +185,7 @@ async fn increase(State(conn): State>>, Path(id): Path>, id: i32) { - let conn = conn.lock().unwrap(); + let conn = conn.lock(); let mut stmt = conn.prepare("UPDATE food SET actual_servings = MAX((SELECT actual_servings FROM food WHERE id = ?1) - 1, 0) WHERE id = ?1 RETURNING actual_servings").unwrap(); let new: i32 = stmt.query_one((id,), |row| row.get(0)).unwrap(); debug!(id, new_serving_count = new, "decrease");