database_replicator/
state.rs

1use anyhow::Result;
2use serde::{Deserialize, Serialize};
3use std::fs;
4use std::path::PathBuf;
5
6#[derive(Serialize, Deserialize, Default)]
7pub struct AppState {
8    pub target_url: Option<String>,
9}
10
11fn get_state_path() -> Result<PathBuf> {
12    let home_dir =
13        dirs::home_dir().ok_or_else(|| anyhow::anyhow!("Could not find home directory"))?;
14    let state_dir = home_dir.join(".database-replicator");
15    if !state_dir.exists() {
16        fs::create_dir_all(&state_dir)?;
17    }
18    Ok(state_dir.join("state.json"))
19}
20
21pub fn load() -> Result<AppState> {
22    let state_path = get_state_path()?;
23    if !state_path.exists() {
24        return Ok(AppState::default());
25    }
26    let state_file = fs::File::open(state_path)?;
27    let state = serde_json::from_reader(state_file)?;
28    Ok(state)
29}
30
31pub fn save(state: &AppState) -> Result<()> {
32    let state_path = get_state_path()?;
33    let state_file = fs::File::create(state_path)?;
34    serde_json::to_writer_pretty(state_file, state)?;
35    Ok(())
36}