diff options
Diffstat (limited to 'mling/src/lib.rs')
| -rw-r--r-- | mling/src/lib.rs | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/mling/src/lib.rs b/mling/src/lib.rs index d4ce697..add20ac 100644 --- a/mling/src/lib.rs +++ b/mling/src/lib.rs @@ -1,32 +1,57 @@ #![allow(unused_imports)] +use colored::Colorize; use mingling::{ - macros::{gen_program, r_println, renderer}, + macros::{chain, gen_program, pack, r_println, renderer}, res::ResExitCode, }; pub mod cli; +pub use cli::*; mod cargo_style; pub use cargo_style::*; pub mod display; pub mod res; +mod pkg_mgr; +pub use pkg_mgr::*; + mod proj_mgr; -use proj_mgr::*; +pub use proj_mgr::*; use crate::display::markdown; -#[renderer] -pub fn render_error_dispatch_not_found(err: ErrorDispatcherNotFound, ec: &mut ResExitCode) { +pack!(ResultMlingHelp = ()); +pack!(ResultUnknownCommand = String); + +#[chain] +fn handle_error_dispatcher_not_found(err: ErrorDispatcherNotFound) -> Next { if err.is_empty() { - r_println!("{}", markdown(include_str!("helps/mling_help.txt"))); - ec.exit_code = 0; + ResultMlingHelp::default().to_render() } else { - let s = eformat_cargo!("Cannot find subcommand \"{}\"", err.join(" ")); - r_println!("{}", s); - ec.exit_code = 1; + ResultUnknownCommand::new(err.join(" ")).to_render() } } +#[renderer] +fn render_mling_help(_prev: ResultMlingHelp, ec: &mut ResExitCode) { + r_println!("{}", markdown(include_str!("helps/mling_help.txt"))); + ec.exit_code = 0; +} + +#[renderer] +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; +} + gen_program!(); |
