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