]> git.r.bdr.sh - rbdr/blog/blobdiff - src/main.rs
Add status command
[rbdr/blog] / src / main.rs
index cb258c277f8257e684f48f64cb6c9a8b947d4927..bf1e1844a2162646f2046f728af45de84a187aef 100644 (file)
@@ -2,24 +2,34 @@
 mod configuration;
 mod command;
 
+use std::iter::once;
 use std::env::args;
 use std::io::Result;
-use configuration::Configuration;
 use command::{available_commands, Command, help::Help};
 
 fn main() -> Result<()> {
-    let configuration = Configuration::new();
     let commands = available_commands();
-
-    println!("CONFIGURATION DIRECTORY: {}", configuration.config_directory.display());
-    println!("DATA DIRECTORY: {}", configuration.data_directory.display());
-    println!("OUTPUT DIRECTORY: {}", configuration.output_directory.display());
-
     let arguments: Vec<String> = args().collect();
 
     if let Some(command_name) = arguments.get(1) {
-        if let Some(command) = commands.iter().find(|&c| c.command() == command_name) {
-            return command.execute(arguments.get(2));
+        if let Some(main_command) = commands.into_iter().find(|c| c.command() == command_name) {
+            let before_commands = main_command.before_dependencies();
+            let after_commands = main_command.after_dependencies();
+
+            let command_chain: Vec<Box<dyn Command>> = before_commands
+                .into_iter()
+                .chain(once(main_command))
+                .chain(after_commands.into_iter())
+                .collect();
+
+            for command in command_chain {
+                let result = command.execute(arguments.get(2));
+                if let Err(_) = result {
+                    return result;
+                }
+            }
+
+            return Ok(())
         }
     }