// mod argument_parser; mod configuration; mod command; use std::iter::once; use std::env::args; use std::io::Result; use command::{available_commands, Command, help::Help}; fn main() -> Result<()> { let commands = available_commands(); let arguments: Vec = args().collect(); if let Some(command_name) = arguments.get(1) { 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> = 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(()) } } Help::new().execute(None) }