struct Subcommand (
&'static str, // command
&'static str, // desc
- fn(&'static Subcommand, CookedStdout, MainOpts, Vec<String>) -> Result<(),E>,
+ fn(SubCommandCallArgs) -> Result<(),E>,
);
inventory::collect!(Subcommand);
+pub struct SubCommandCallArgs {
+ sc: &'static Subcommand,
+ out: CookedStdout,
+ ma: MainOpts,
+ args: Vec<String>
+}
+pub type SCCA = SubCommandCallArgs;
+
#[derive(Error,Debug,Clone,Display)]
struct ArgumentParseError(String);
env::args().next().unwrap(),
&subcommand));
- call(sc, stdout, mo, subargs).unwrap_or_else(|e| e.end_process(12));
+ call(SubCommandCallArgs { sc, ma: mo, out: stdout, args: subargs })
+ .unwrap_or_else(|e| e.end_process(12));
}
struct Conn {
ap
}
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut conn = connect(&ma)?;
let mut games = match conn.cmd(&MC::ListGames { all: Some(args.all) })? {
ap
}
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ ma, args,.. }:SCCA) -> Result<(),AE> {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let instance_name = ma.instance();
let mut chan = ma.access_game()?;
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = ma.access_game()?;
ap
}
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = ma.access_game()?;
type Args = NoArgs;
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut chan = ma.access_game()?;
type Args = NoArgs;
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ ma, args,.. }:SCCA) -> Result<(),AE> {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut chan = ma.access_game()?;
let game = chan.game.clone();
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = ma.access_game()?;
ap
}
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
const MAGIC: &str = "mgmt-library-load-marker";
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
type Args = NoArgs;
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut chan = ma.access_game()?;
let (pieces, pcaliases) = chan.list_pieces()?;
}
#[throws(AE)]
- fn call(sc: &'static Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ sc, mut out, ma, args,.. }:SCCA) {
let ahf = sc.into();
let subargs: ApMaker<_> = &|sa| subargs(sa,ahf);
ap
}
- fn call(sc: &'static Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>)
- -> Result<(),AE> {
+ fn call(SCCA{ sc, mut out, ma, args,.. }:SCCA) -> Result<(),AE> {
let ahf = sc.into();
let subargs: ApMaker<_> = &|sa| subargs(sa,ahf);
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = ma.access_game()?;
let mut progress = ma.progressbar()?;
type Args = NoArgs;
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut chan = ma.access_game()?;
let resp = chan.cmd(&MC::ListBundles {
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = ma.access_game()?;
let kind = bundles::Kind::only();
type Args = NoArgs;
#[throws(AE)]
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ ma, args,.. }:SCCA) {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut chan = ma.access_game()?;
clear_game(&ma, &mut chan)?;
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut conn = connect(&ma)?;
let all = Some(args.all);
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = connect_chan(&ma)?;
}
#[throws(AE)]
- fn call(_sc: &Subcommand, mut _out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ ma, args,.. }:SCCA) {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut conn = connect(&ma)?;
type Args = NoArgs;
#[throws(AE)]
- fn call(_sc: &Subcommand, mut out: CookedStdout, ma: MainOpts, args: Vec<String>) {
+ fn call(SCCA{ mut out, ma, args,.. }:SCCA) {
let _args = parse_args::<Args,_>(args, &noargs, &ok_id, None);
let mut conn = connect(&ma)?;