vojtech@29: /** vojtech@29: * parameter-lister (Rust implementation) vojtech@29: * Copyright © 2016 Vojtěch Král vojtech@29: * vojtech@29: * This program is free software: you can redistribute it and/or modify vojtech@29: * it under the terms of the GNU General Public License as published by vojtech@29: * the Free Software Foundation, either version 3 of the License, or vojtech@29: * (at your option) any later version. vojtech@29: * vojtech@29: * This program is distributed in the hope that it will be useful, vojtech@29: * but WITHOUT ANY WARRANTY; without even the implied warranty of vojtech@29: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the vojtech@29: * GNU General Public License for more details. vojtech@29: * vojtech@29: * You should have received a copy of the GNU General Public License vojtech@29: * along with this program. If not, see . vojtech@29: */ vojtech@29: use std::collections::HashMap; vojtech@29: use std::env; vojtech@29: use std::io; vojtech@29: vojtech@29: mod outputmodule; vojtech@29: mod terminalmodule; vojtech@29: mod xmlmodule; vojtech@29: vojtech@29: use outputmodule::OutputModule; vojtech@29: use terminalmodule::TerminalModule; vojtech@29: use xmlmodule::XMLModule; vojtech@29: vojtech@29: static ENV_OUTPUT_MODULE_NAME: &'static str = "PARAMETER_LISTER_OUTPUT"; vojtech@29: vojtech@29: vojtech@29: fn main() { vojtech@29: let mut modules: HashMap<_, Box> = HashMap::new(); vojtech@29: modules.insert(terminalmodule::MOD_NAME, Box::new(TerminalModule::new())); vojtech@29: modules.insert(xmlmodule::MOD_NAME, Box::new(XMLModule::new())); vojtech@29: vojtech@29: let module_name = env::var(ENV_OUTPUT_MODULE_NAME).unwrap_or(String::from("terminal")); vojtech@29: let module = modules.get(&*module_name).expect(&*format!("No such module: {}", module_name)); vojtech@29: vojtech@29: match module.process(&mut io::stdout(), env::args().collect()) { vojtech@29: Ok(()) => {}, vojtech@29: Err(msg) => panic!("Error while processing output with module {}: {}", module_name, msg), vojtech@29: } vojtech@29: }