aboutsummaryrefslogtreecommitdiff
path: root/mling/src/cli/install.rs
blob: 59d1d9701c929467eca0e9c051f1610c26118a4b (plain) (blame)
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
use mingling::{
    ShellContext, Suggest,
    macros::{chain, completion, dispatcher, pack, suggest},
    parser::Picker,
};

use crate::project_installer::install_all;

dispatcher!("install", InstallCommand => InstallEntry);

pack!(ResultInstallCompleted = ());

#[completion(InstallEntry)]
pub(crate) fn comp_install(ctx: &ShellContext) -> Suggest {
    if ctx.typing_argument() {
        return suggest! {
            "--clean": "Clean build artifacts before installation",
            "-c": "Clean build artifacts before installation",
        };
    }
    return suggest!();
}

#[chain]
pub(crate) fn handle_install_entry(prev: InstallEntry) -> NextProcess {
    let is_clean_before_build = Picker::new(prev.inner)
        .pick::<bool>(["--clean", "-c"])
        .unpack();
    let _ = install_all(is_clean_before_build);

    ResultInstallCompleted::new(())
}