use anyhow::{Context, Result};
use dialoguer::Input;
use log::{debug, warn};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Config {
pub always_ask_permission: bool,
}
impl Default for Config {
fn default() -> Self {
Config {
always_ask_permission: false, }
}
}
pub fn initialize_configuration() -> Result<()> {
debug!("Initializing configuration process started.");
let mut config: Config = confy::load("cratup_auto", "config")
.context("Failed to load configuration")?;
let current_value = if config.always_ask_permission { "yes" } else { "no" };
let input: String = Input::new()
.with_prompt(format!(
"Always ask for permission to modify files? (yes/no, current: {})",
current_value
))
.default(String::from(current_value))
.interact_text()?;
config.always_ask_permission = if input == "yes" { true } else { false };
debug!(
"User input received for always_ask_permission: {}",
config.always_ask_permission
);
confy::store("cratup_auto", "config", &config)
.context("Failed to save configuration")?;
debug!("Configuration saved successfully.");
Ok(())
}
pub fn load_default_configuration() -> Result<Config> {
debug!("Default configuration loading using confy...");
match confy::load("cratup_auto", "config") {
Ok(config) => {
debug!("Configuration successfully loaded.");
Ok(config)
}
Err(err) => {
warn!(
"Failed to load configuration: {}. Using default configuration.",
err
);
Ok(Config::default())
}
}
}