use std::fs::{self, File}; use crate::display::theme::Theme; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct Config { pub auth: Auth, pub theme: Theme, } #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct Auth { hostname: Option, token: Option, } impl Config { pub fn load_or_create() -> Result { const CONFIG_FILENAME: &str = "kk.toml"; let xdg_dirs = xdg::BaseDirectories::with_prefix("kk")?; let cfg_filename = xdg_dirs.place_config_file(CONFIG_FILENAME)?; Ok(match fs::read(&cfg_filename) { Ok(f) => toml::from_slice(&f)?, Err(_) => { // Save default file let cfg = Self::default(); let fmt_cfg = toml::to_string_pretty(&cfg)?; fs::write(cfg_filename, fmt_cfg)?; cfg } }) } }