use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Default)]
pub struct Config {
pub refresh_token: Option<String>,
}
fn config_path() -> Option<PathBuf> {
dirs::config_dir().map(|d| d.join("pixiv-dl").join("config.json"))
}
pub fn config_path_display() -> Option<String> {
config_path().map(|p| p.display().to_string())
}
pub fn load() -> Config {
let Some(path) = config_path() else {
return Config::default();
};
std::fs::read_to_string(&path)
.ok()
.and_then(|s| serde_json::from_str(&s).ok())
.unwrap_or_default()
}
pub fn save(config: &Config) -> Result<(), Box<dyn std::error::Error>> {
let path = config_path().ok_or("Could not determine config directory")?;
if let Some(parent) = path.parent() {
std::fs::create_dir_all(parent)?;
}
std::fs::write(&path, serde_json::to_string_pretty(config)?)?;
Ok(())
}