use std::path::{Path, PathBuf}; const PEER_ID_FILE: &str = "peer_id"; const LOCAL_LIBRARY_DIR: &str = "local_library"; const LOCAL_LIBRARY_INDEX_FILE: &str = "index.json"; const GAMES_DIR: &str = "games"; const SETUP_DONE_FILE: &str = "setup_done"; const LAUNCH_SETTINGS_APPLIED_FILE: &str = "launch_settings_applied"; pub(crate) fn resolve_state_dir(explicit: Option<&Path>) -> PathBuf { if let Some(dir) = explicit { return dir.to_path_buf(); } if let Some(dir) = std::env::var_os("LANSPREAD_STATE_DIR") { return PathBuf::from(dir); } if let Some(home) = std::env::var_os("HOME").or_else(|| std::env::var_os("USERPROFILE")) { return PathBuf::from(home).join(".lanspread"); } std::env::temp_dir().join("lanspread") } pub(crate) fn peer_id_path(state_dir: &Path) -> PathBuf { state_dir.join(PEER_ID_FILE) } pub(crate) fn local_library_index_path(state_dir: &Path) -> PathBuf { state_dir .join(LOCAL_LIBRARY_DIR) .join(LOCAL_LIBRARY_INDEX_FILE) } pub(crate) fn game_state_dir(state_dir: &Path, game_id: &str) -> PathBuf { state_dir.join(GAMES_DIR).join(game_id) } #[must_use] pub fn setup_done_path(state_dir: &Path, game_id: &str) -> PathBuf { game_state_dir(state_dir, game_id).join(SETUP_DONE_FILE) } #[must_use] pub fn launch_settings_applied_path(state_dir: &Path, game_id: &str) -> PathBuf { game_state_dir(state_dir, game_id).join(LAUNCH_SETTINGS_APPLIED_FILE) }