From 993ba8d408232fa8a7d89d1660f971a305e1fc2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asger=20Juul=20Brunsh=C3=B8j?= Date: Wed, 22 Jan 2025 23:08:58 +0100 Subject: [PATCH] feat: default state --- crates/ascend/src/server.rs | 14 ++++++++++---- crates/ascend/src/server/persistence.rs | 1 - 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/ascend/src/server.rs b/crates/ascend/src/server.rs index 3ea039f..ba6c49e 100644 --- a/crates/ascend/src/server.rs +++ b/crates/ascend/src/server.rs @@ -9,6 +9,7 @@ use state::PersistentState; use state::State; use std::collections::BTreeMap; use std::path::Path; +use std::path::PathBuf; use tower_http::services::ServeDir; use tracing::level_filters::LevelFilter; use type_toppings::ResultExt; @@ -36,7 +37,6 @@ pub mod cli { ImportMiniMoonboardProblems { file_path: PathBuf, }, - // TODO: idempotent state initialization to be used in systemd preStart hook } } @@ -156,10 +156,16 @@ fn file_service(path: impl AsRef) -> ServeDir { #[tracing::instrument] async fn load_state() -> Result { tracing::info!("Loading state"); - let state = State { - persistent: Persistent::::load(&Path::new(STATE_FILE)).await?, + + let p = PathBuf::from(STATE_FILE); + let persistent = if p.try_exists()? { + tracing::info!("No state found at {STATE_FILE}, creating default state"); + Persistent::::load(&p).await? + } else { + Persistent::::new(PersistentState::default(), p) }; - Ok(state) + + Ok(State { persistent }) } #[tracing::instrument] diff --git a/crates/ascend/src/server/persistence.rs b/crates/ascend/src/server/persistence.rs index deab2f4..eda5713 100644 --- a/crates/ascend/src/server/persistence.rs +++ b/crates/ascend/src/server/persistence.rs @@ -1,4 +1,3 @@ -use camino::Utf8PathBuf; use serde::Serialize; use serde::de::DeserializeOwned; use std::path::Path;