diff --git a/src/main.rs b/src/main.rs index 6b4502c..e8e5987 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,6 +23,17 @@ struct AppState { record: Arc>, } +impl AppState { + fn save(&self) { + let st = self.record.lock().unwrap().to_owned(); + serde_json::to_writer( + &std::fs::File::create("votes.json").unwrap(), + &st, + ) + .expect("failed to write votes!"); + } +} + async fn view_votes(State(state): State, Path(slug): Path) -> Json { tracing::info!("Requesting votes for {slug}"); @@ -54,6 +65,8 @@ async fn leaderboard_submit_score(State(state): State, Path(slug): Pat .pages .push(Page { slug, votes: 1 }); } + + state.save(); } #[tokio::main] @@ -85,10 +98,5 @@ async fn main() { .unwrap(); let state_clone = initial_state.clone(); - let st = state_clone.record.lock().unwrap().to_owned(); - serde_json::to_writer( - &std::fs::File::create("votes.json").unwrap(), - &st, - ) - .expect("TODO: panic message"); + state_clone.save(); }