aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/dispatcher_mgr.rs
blob: 483a48c79caf4ae422cf0fe6c9f6e3ba122a861e (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
39
40
41
42
43
44
45
46
47
use mingling::{
    AnyOutput,
    macros::{chain, dispatcher, pack, r_println, renderer},
    marker::NextProcess,
    parser::Picker,
};

use crate::ThisProgram;

dispatcher!("add.dispatcher", AddDispatcherCommand => AddDispatcherEntry);
dispatcher!("remove.dispatcher", RemoveDispatcherCommand => RemoveDispatcherEntry);

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

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

pack!(AddDispatcherInput = String);

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

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

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

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