database_replicator/
state.rs1use 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}