summaryrefslogtreecommitdiff
path: root/mingling_cli/src/add_dispatcher.rs
blob: c5eaec47b5c46320bf8db16cfdc8dc35cb1ebe98 (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
33
34
35
36
37
38
use mingling::{
    AnyOutput,
    macros::{chain, dispatcher, pack, r_println, renderer},
    marker::NextProcess,
    parser::Picker,
};

use crate::MinglingCLI;

dispatcher!(MinglingCLI, "add.dispatcher", AddDispatcherCommand => AddDispatcherEntry);

#[chain(MinglingCLI)]
pub async fn parse_add_dispatcher(args: AddDispatcherEntry) -> NextProcess {
    let picker: Picker<MinglingCLI> = Picker::new(args.inner);
    let dispatcher_name = picker.pick::<String>(()).unpack_directly().0;
    let input = AddDispatcherInput::new(dispatcher_name);
    input.into()
}

pack!(MinglingCLI, AddDispatcherInput = String);

#[chain(MinglingCLI)]
pub async fn exec_add_dispatcher(_input: AddDispatcherInput) -> NextProcess {
    AnyOutput::new(AddDispatcherSuccess::new(())).route_chain()
}

pack!(MinglingCLI, AddDispatcherSuccess = ());
pack!(MinglingCLI, AddDispatcherFailed = String);

#[renderer(MinglingCLI)]
pub fn render_add_dispatcher_success(_prev: AddDispatcherSuccess) {
    r_println!("Dispatcher added successfully");
}

#[renderer(MinglingCLI)]
pub fn render_add_dispatcher_failed(prev: AddDispatcherFailed) {
    r_println!("Error: {}", prev.inner);
}