aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/dispatcher_mgr.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-14 21:57:06 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-14 21:57:06 +0800
commit59d9fbdf0873b241774366a91c76728d63a9004d (patch)
treead93f4f34b4ff9afb7fb3edfc2de5ed6c826bb70 /mingling_cli/src/dispatcher_mgr.rs
parent8ed25a022daaf0c9d50b3cb224cb67598e383e65 (diff)
parent33469c75614c444f512fd51dbc78a31a9a4bec82 (diff)
Add argument filtering and CLI build support
Diffstat (limited to 'mingling_cli/src/dispatcher_mgr.rs')
-rw-r--r--mingling_cli/src/dispatcher_mgr.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/mingling_cli/src/dispatcher_mgr.rs b/mingling_cli/src/dispatcher_mgr.rs
new file mode 100644
index 0000000..483a48c
--- /dev/null
+++ b/mingling_cli/src/dispatcher_mgr.rs
@@ -0,0 +1,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);
+}