game: Option<String>,
ssh_command: String,
ssh_proxy_command: String,
+ sc: &'static Subcommand,
}
fn default_ssh_proxy_command() -> String {
}
pub struct SubCommandCallArgs {
- sc: &'static Subcommand,
out: CookedStdout,
ma: MainOpts,
args: Vec<String>
.command_socket.clone()
))
})?;
+
+ let sc = inventory::iter::<Subcommand>.into_iter()
+ .filter(|Subcommand{verb:found,..}| found == &subcommand)
+ .next()
+ .unwrap_or_else(||{
+ eprintln!("subcommand `{}' not recognised", &subcommand);
+ exit(EXIT_USAGE);
+ });
+
Ok((subcommand, subargs, MainOpts {
account,
access,
game,
ssh_command,
ssh_proxy_command,
+ sc,
}))
}, Some(&|w|{
writeln!(w, "\nSubcommands:")?;
Ok(())
}));
- let sc = inventory::iter::<Subcommand>.into_iter()
- .filter(|Subcommand{verb:found,..}| found == &subcommand)
- .next()
- .unwrap_or_else(||{
- eprintln!("subcommand `{}' not recognised", &subcommand);
- exit(EXIT_USAGE);
- });
let stdout = CookedStdout::new();
let mut subargs = subargs;
subargs.insert(0, format!("{} {}",
env::args().next().unwrap(),
&subcommand));
- (sc.call)(SubCommandCallArgs { sc, ma: mo, out: stdout, args: subargs })
+ (mo.sc.call)(SubCommandCallArgs { ma: mo, out: stdout, args: subargs })
.unwrap_or_else(|e| e.end_process(12));
}
}
#[throws(AE)]
- fn call(SCCA{ sc, mut out, ma, args,.. }:SCCA) {
- let ahf = sc.into();
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
+ let ahf = ma.sc.into();
let subargs: ApMaker<_> = &|sa| subargs(sa,ahf);
let args = parse_args::<Args,_>(args, subargs, &ok_id, None);
ap
}
- fn call(SCCA{ sc, mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
- let ahf = sc.into();
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
+ let ahf = ma.sc.into();
let subargs: ApMaker<_> = &|sa| subargs(sa,ahf);
let args = parse_args::<Args,_>(args, subargs, &ok_id, None);