use crate::config::config_file::ConfigFile;
use crate::runners::cfg_cmd_runner::ConfigCmdRunner;
use crate::{args::commands::ConfigActionValues, utils::PrintableData};
use std::io::Error;
pub struct ConfigExecutor {
config_cmd_runner: ConfigCmdRunner,
config_action: ConfigActionValues,
}
impl ConfigExecutor {
pub fn new(cfg_file: String, config_action: ConfigActionValues) -> Self {
let config_cmd_runner = ConfigCmdRunner::new(cfg_file.clone());
Self {
config_cmd_runner,
config_action,
}
}
pub async fn exec_config_command(
&self,
cfg_data: ConfigFile,
) -> Result<Vec<PrintableData>, Box<dyn std::error::Error>> {
match self.config_action {
ConfigActionValues::Auth => match self.config_cmd_runner.set_cfg_auth(cfg_data) {
Ok(_) => Ok(vec![PrintableData::Generic {
data: vec![serde_json::Value::String(
"Authentication configuration stored successfully".to_string(),
)],
}]),
Err(err) => Err(Box::new(Error::other(format!(
"Error storing authentication configuration: {err}"
)))),
},
ConfigActionValues::Jira => match self.config_cmd_runner.set_cfg_jira(cfg_data) {
Ok(_) => Ok(vec![PrintableData::Generic {
data: vec![serde_json::Value::String(
"Initialization configuration stored successfully".to_string(),
)],
}]),
Err(err) => Err(Box::new(Error::other(format!(
"Error storing initialization configuration: {err}"
)))),
},
ConfigActionValues::Setup => match self.config_cmd_runner.setup_cfg(cfg_data) {
Ok(_) => Ok(vec![PrintableData::Generic {
data: vec![serde_json::Value::String(
"Configuration setup successfully".to_string(),
)],
}]),
Err(err) => Err(Box::new(Error::other(format!(
"Error setting up configuration: {err}"
)))),
},
ConfigActionValues::Show => {
self.config_cmd_runner.show_cfg(cfg_data);
Ok(vec![PrintableData::Generic {
data: vec![serde_json::Value::String("DONE!".to_string())],
}])
}
}
}
}