aboutsummaryrefslogtreecommitdiff
path: root/mling/src/cli.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-07 15:40:53 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-07 15:40:53 +0800
commit86647e7b5057826d7bb85381044d5b691fbbafa3 (patch)
tree69a1768c3c8f571bfde426948bb58fe2e3e93bf2 /mling/src/cli.rs
parent8aa276beb88086b866be8a446289106be237348a (diff)
Move error handling into its own module and add show.binaries command
Diffstat (limited to 'mling/src/cli.rs')
-rw-r--r--mling/src/cli.rs44
1 files changed, 39 insertions, 5 deletions
diff --git a/mling/src/cli.rs b/mling/src/cli.rs
index 0bae4a4..21f7220 100644
--- a/mling/src/cli.rs
+++ b/mling/src/cli.rs
@@ -1,18 +1,20 @@
-use std::{env::current_dir, path::PathBuf, process::exit, str::FromStr};
-
use crate::{
- CMDCompletion, PackageManagerSetup, ProjectManagerSetup, ThisProgram,
+ CMDCompletion, ErrorDispatcherNotFound, Next, PackageManagerSetup, ProjectManagerSetup,
+ ThisProgram,
display::markdown,
- eprintln_cargo,
+ eformat_cargo, eprintln_cargo, hformat_cargo,
pkg_mgr::{CMDInstall, CMDListNamespace, CMDRemoveNamespace},
res::{ResCurrentDir, ResManifestPath},
};
+use colored::Colorize;
use mingling::{
Program,
hook::ProgramHook,
- macros::{help, program_setup},
+ macros::{chain, help, pack, program_setup, r_println, renderer},
+ res::ResExitCode,
setup::{ExitCodeSetup, GeneralRendererSetup, HelpFlagSetup, QuietFlagSetup},
};
+use std::{env::current_dir, path::PathBuf, process::exit, str::FromStr};
pub fn run() {
#[cfg(windows)]
@@ -140,3 +142,35 @@ fn resolve_manifest_path(provided: Option<String>) -> PathBuf {
}
}
}
+
+pack!(ResultMlingHelp = ());
+pack!(ResultUnknownCommand = String);
+
+#[chain]
+pub fn handle_error_dispatcher_not_found(err: ErrorDispatcherNotFound) -> Next {
+ if err.is_empty() {
+ ResultMlingHelp::default().to_render()
+ } else {
+ ResultUnknownCommand::new(err.join(" ")).to_render()
+ }
+}
+
+#[renderer]
+pub fn render_mling_help(_prev: ResultMlingHelp, ec: &mut ResExitCode) {
+ r_println!("{}", markdown(include_str!("helps/mling_help.txt")));
+ ec.exit_code = 0;
+}
+
+#[renderer]
+pub fn render_unknown_command(prev: ResultUnknownCommand, ec: &mut ResExitCode) {
+ r_println!(
+ "{}",
+ eformat_cargo!("no such command: `{}`", prev.bright_yellow().bold())
+ );
+ r_println!();
+ r_println!(
+ "{}",
+ hformat_cargo!("view all commands with `cargo help mling`")
+ );
+ ec.exit_code = 101;
+}