diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-06-07 15:40:53 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-06-07 15:40:53 +0800 |
| commit | 86647e7b5057826d7bb85381044d5b691fbbafa3 (patch) | |
| tree | 69a1768c3c8f571bfde426948bb58fe2e3e93bf2 /mling/src/cli.rs | |
| parent | 8aa276beb88086b866be8a446289106be237348a (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.rs | 44 |
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; +} |
