eh: streamline multicall command handler
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I5da79ddb79286dbc06f2ae0101b6ad086a6a6964
This commit is contained in:
parent
4a57561d7b
commit
44be9e1c1f
1 changed files with 27 additions and 58 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
use std::{env, path::Path};
|
use std::{env, path::Path};
|
||||||
|
|
||||||
use eh::{Cli, Command, CommandFactory, Parser};
|
use eh::{Cli, Command, CommandFactory, Parser};
|
||||||
use error::Result;
|
|
||||||
use yansi::Paint;
|
use yansi::Paint;
|
||||||
|
|
||||||
mod commands;
|
mod commands;
|
||||||
|
|
@ -26,11 +25,30 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Design partially taken from Stash
|
fn handle_command(command: &str, args: &[String]) -> error::Result<i32> {
|
||||||
|
let hash_extractor = util::RegexHashExtractor;
|
||||||
|
let fixer = util::DefaultNixFileFixer;
|
||||||
|
let classifier = util::DefaultNixErrorClassifier;
|
||||||
|
|
||||||
|
match command {
|
||||||
|
"update" => commands::update::handle_update(args),
|
||||||
|
"run" | "shell" | "build" => {
|
||||||
|
commands::handle_nix_command(
|
||||||
|
command,
|
||||||
|
args,
|
||||||
|
&hash_extractor,
|
||||||
|
&fixer,
|
||||||
|
&classifier,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn dispatch_multicall(
|
fn dispatch_multicall(
|
||||||
app_name: &str,
|
app_name: &str,
|
||||||
args: std::env::Args,
|
args: std::env::Args,
|
||||||
) -> Option<Result<i32>> {
|
) -> Option<error::Result<i32>> {
|
||||||
let rest: Vec<String> = args.collect();
|
let rest: Vec<String> = args.collect();
|
||||||
|
|
||||||
let subcommand = match app_name {
|
let subcommand = match app_name {
|
||||||
|
|
@ -61,31 +79,10 @@ fn dispatch_multicall(
|
||||||
return Some(Ok(0));
|
return Some(Ok(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
if subcommand == "update" {
|
Some(handle_command(subcommand, &rest))
|
||||||
return Some(commands::update::handle_update(&rest));
|
|
||||||
}
|
|
||||||
|
|
||||||
let hash_extractor = util::RegexHashExtractor;
|
|
||||||
let fixer = util::DefaultNixFileFixer;
|
|
||||||
let classifier = util::DefaultNixErrorClassifier;
|
|
||||||
|
|
||||||
Some(match subcommand {
|
|
||||||
"run" | "shell" | "build" => {
|
|
||||||
commands::handle_nix_command(
|
|
||||||
subcommand,
|
|
||||||
&rest,
|
|
||||||
&hash_extractor,
|
|
||||||
&fixer,
|
|
||||||
&classifier,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
// subcommand is assigned from the match on app_name above;
|
|
||||||
// only "run"/"shell"/"build" are possible values.
|
|
||||||
_ => unreachable!(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_app() -> Result<i32> {
|
fn run_app() -> error::Result<i32> {
|
||||||
let mut args = env::args();
|
let mut args = env::args();
|
||||||
let bin = args.next().unwrap_or_else(|| "eh".to_string());
|
let bin = args.next().unwrap_or_else(|| "eh".to_string());
|
||||||
let app_name = Path::new(&bin)
|
let app_name = Path::new(&bin)
|
||||||
|
|
@ -100,42 +97,14 @@ fn run_app() -> Result<i32> {
|
||||||
|
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
|
|
||||||
let hash_extractor = util::RegexHashExtractor;
|
|
||||||
let fixer = util::DefaultNixFileFixer;
|
|
||||||
let classifier = util::DefaultNixErrorClassifier;
|
|
||||||
|
|
||||||
match cli.command {
|
match cli.command {
|
||||||
Some(Command::Run { args }) => {
|
Some(Command::Run { args }) => handle_command("run", &args),
|
||||||
commands::handle_nix_command(
|
|
||||||
"run",
|
|
||||||
&args,
|
|
||||||
&hash_extractor,
|
|
||||||
&fixer,
|
|
||||||
&classifier,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
Some(Command::Shell { args }) => {
|
Some(Command::Shell { args }) => handle_command("shell", &args),
|
||||||
commands::handle_nix_command(
|
|
||||||
"shell",
|
|
||||||
&args,
|
|
||||||
&hash_extractor,
|
|
||||||
&fixer,
|
|
||||||
&classifier,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
Some(Command::Build { args }) => {
|
Some(Command::Build { args }) => handle_command("build", &args),
|
||||||
commands::handle_nix_command(
|
|
||||||
"build",
|
|
||||||
&args,
|
|
||||||
&hash_extractor,
|
|
||||||
&fixer,
|
|
||||||
&classifier,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
Some(Command::Update { args }) => commands::update::handle_update(&args),
|
Some(Command::Update { args }) => handle_command("update", &args),
|
||||||
|
|
||||||
None => {
|
None => {
|
||||||
Cli::command().print_help()?;
|
Cli::command().print_help()?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue