jirust_cli/executors/config_executor.rs
1use crate::config::config_file::ConfigFile;
2use crate::runners::cfg_cmd_runner::ConfigCmdRunner;
3use crate::{args::commands::ConfigActionValues, utils::PrintableData};
4
5use std::io::Error;
6
7/// ConfigExecutor struct
8///
9/// # Fields
10///
11/// * `config_cmd_runner: ConfigCmdRunner` - configuration command runner
12/// * `config_action: ConfigActionValues` - configuration action
13pub struct ConfigExecutor {
14 /// Configuration command runner
15 config_cmd_runner: ConfigCmdRunner,
16 /// Configuration action
17 config_action: ConfigActionValues,
18}
19
20/// ConfigExecutor implementation
21///
22/// # Methods
23///
24/// * `new(cfg_file: String, config_action: ConfigActionValues) -> Self` - returns a new ConfigExecutor instance
25/// * `exec_config_command(cfg_data: ConfigFile) -> Result<(), Box<dyn std::error::Error>>` - executes the configuration command
26impl ConfigExecutor {
27 /// Returns a new ConfigExecutor instance
28 ///
29 /// # Arguments
30 ///
31 /// * `cfg_file: String` - configuration file path
32 /// * `config_action: ConfigActionValues` - configuration action
33 ///
34 /// # Returns
35 ///
36 /// * `Self` - a new ConfigExecutor instance
37 ///
38 /// # Examples
39 ///
40 /// ```
41 /// use jirust_cli::executors::config_executor::ConfigExecutor;
42 /// use jirust_cli::args::commands::ConfigArgs;
43 /// use jirust_cli::args::commands::ConfigActionValues;
44 ///
45 /// let args = ConfigArgs {
46 /// cfg_act: ConfigActionValues::Setup,
47 /// };
48 ///
49 /// let config_executor = ConfigExecutor::new("config_file_path".to_string(), args.cfg_act);
50 /// ```
51 pub fn new(cfg_file: String, config_action: ConfigActionValues) -> Self {
52 let config_cmd_runner = ConfigCmdRunner::new(cfg_file.clone());
53 Self {
54 config_cmd_runner,
55 config_action,
56 }
57 }
58
59 /// Executes the selected configuration command
60 ///
61 /// # Arguments
62 ///
63 /// * `cfg_data: ConfigFile` - configuration file data
64 ///
65 /// # Returns
66 ///
67 /// * `Result<(), Box<dyn std::error::Error>>` - Result with the execution status
68 ///
69 /// # Examples
70 ///
71 /// ```no_run
72 /// use jirust_cli::executors::config_executor::ConfigExecutor;
73 /// use jirust_cli::config::config_file::ConfigFile;
74 /// use jirust_cli::args::commands::ConfigArgs;
75 /// use jirust_cli::args::commands::ConfigActionValues;
76 /// # use std::error::Error;
77 ///
78 /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
79 /// # tokio_test::block_on(async {
80 /// let args = ConfigArgs {
81 /// cfg_act: ConfigActionValues::Setup,
82 /// };
83 /// let cfg_data = ConfigFile::default();
84 /// let config_executor = ConfigExecutor::new("config_file_path".to_string(), args.cfg_act);
85 ///
86 ///
87 /// config_executor.exec_config_command(cfg_data).await?;
88 /// # Ok(())
89 /// # })
90 /// # }
91 /// ```
92 pub async fn exec_config_command(
93 &self,
94 cfg_data: ConfigFile,
95 ) -> Result<Vec<PrintableData>, Box<dyn std::error::Error>> {
96 match self.config_action {
97 ConfigActionValues::Auth => match self.config_cmd_runner.set_cfg_auth(cfg_data) {
98 Ok(_) => Ok(vec![PrintableData::Generic {
99 data: vec![serde_json::Value::String(
100 "Authentication configuration stored successfully".to_string(),
101 )],
102 }]),
103 Err(err) => Err(Box::new(Error::other(format!(
104 "Error storing authentication configuration: {err}"
105 )))),
106 },
107 ConfigActionValues::Jira => match self.config_cmd_runner.set_cfg_jira(cfg_data) {
108 Ok(_) => Ok(vec![PrintableData::Generic {
109 data: vec![serde_json::Value::String(
110 "Initialization configuration stored successfully".to_string(),
111 )],
112 }]),
113 Err(err) => Err(Box::new(Error::other(format!(
114 "Error storing initialization configuration: {err}"
115 )))),
116 },
117 ConfigActionValues::Setup => match self.config_cmd_runner.setup_cfg(cfg_data) {
118 Ok(_) => Ok(vec![PrintableData::Generic {
119 data: vec![serde_json::Value::String(
120 "Configuration setup successfully".to_string(),
121 )],
122 }]),
123 Err(err) => Err(Box::new(Error::other(format!(
124 "Error setting up configuration: {err}"
125 )))),
126 },
127 ConfigActionValues::Show => {
128 self.config_cmd_runner.show_cfg(cfg_data);
129 Ok(vec![PrintableData::Generic {
130 data: vec![serde_json::Value::String("DONE!".to_string())],
131 }])
132 }
133 }
134 }
135}