use std::collections::HashMap; use Command; mod account; pub use self::account::Account; mod status; pub use self::status::Status; mod connect; pub use self::connect::Connect; mod disconnect; pub use self::disconnect::Disconnect; mod relay; pub use self::relay::Relay; mod shutdown; pub use self::shutdown::Shutdown; mod lan; pub use self::lan::Lan; mod tunnel; pub use self::tunnel::Tunnel; mod version; pub use self::version::Version; /// Returns a map of all available subcommands with their name as key. pub fn get_commands() -> HashMap<&'static str, Box> { let commands: Vec> = vec![ Box::new(Account), Box::new(Status), Box::new(Connect), Box::new(Disconnect), Box::new(Shutdown), Box::new(Relay), Box::new(Lan), Box::new(Tunnel), Box::new(Version), ]; let mut map = HashMap::new(); for cmd in commands { if let Some(_) = map.insert(cmd.name(), cmd) { panic!("Multiple commands with the same name"); } } map }