1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
use mingling::{
macros::{r_println, renderer},
setup::{BasicProgramSetup, GeneralRendererSetup},
};
use crate::{CMDCompletion, ErrorDispatcherNotFound, ThisProgram, display::markdown};
pub mod list;
pub use list::*;
pub mod namespace_mgr;
pub use namespace_mgr::*;
pub mod read;
pub use read::*;
pub mod install;
pub use install::*;
/// Entry point for the CLI application.
///
/// # Panics
///
/// Panics on Windows if the virtual terminal processing cannot be enabled.
pub fn cli_entry() {
let mut program = ThisProgram::new();
// Plugins
program.with_setup(BasicProgramSetup);
program.with_setup(GeneralRendererSetup);
program.with_dispatcher(CMDCompletion);
if program.pick_global_flag(["-v", "--version"]) {
println!("{}", include_str!("../res/version.txt").trim_end());
return;
}
// Help
if program.user_context.help {
println!(
"{}",
markdown(include_str!("../res/help-mling.txt").trim_end())
);
return;
}
// Context query commands
program.with_dispatcher(ListInstalledCommand);
program.with_dispatchers((
ReadTargetDirCommand,
ReadWorkspaceRootCommand,
ReadBinariesCommand,
));
// Namespace manage commands
program.with_dispatchers((
TrustNamespaceCommand,
UntrustNamespaceCommand,
SetTrustNamespaceCommand,
RemoveNamespaceCommand,
));
// Install binaries command
program.with_dispatcher(InstallCommand);
// Colored Setup
#[cfg(windows)]
colored::control::set_virtual_terminal(true).unwrap();
let _ = program.exec();
}
#[renderer]
pub(crate) fn fallback_disp(prev: ErrorDispatcherNotFound) {
r_println!("Error: command \"{}\" not found!", prev.join(" "));
r_println!("Use \"mling --help\" for more information.");
}
|