From 9f8307ad9b0f1ce8301698277d2b8ab169ea5f7f Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 6 Apr 2026 15:57:29 +0800 Subject: Add CLI program for managing dispatchers --- mingling_cli/src/add_dispatcher.rs | 38 ++++++++++++++++++++++++++++++++++++++ mingling_cli/src/main.rs | 16 ++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 mingling_cli/src/add_dispatcher.rs create mode 100644 mingling_cli/src/main.rs (limited to 'mingling_cli/src') diff --git a/mingling_cli/src/add_dispatcher.rs b/mingling_cli/src/add_dispatcher.rs new file mode 100644 index 0000000..c5eaec4 --- /dev/null +++ b/mingling_cli/src/add_dispatcher.rs @@ -0,0 +1,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 = Picker::new(args.inner); + let dispatcher_name = picker.pick::(()).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); +} diff --git a/mingling_cli/src/main.rs b/mingling_cli/src/main.rs new file mode 100644 index 0000000..c4dfe21 --- /dev/null +++ b/mingling_cli/src/main.rs @@ -0,0 +1,16 @@ +use mingling::{macros::gen_program, setup::BasicProgramSetup}; + +mod add_dispatcher; +pub use crate::add_dispatcher::*; + +#[tokio::main] +async fn main() { + let mut program = MinglingCLI::new(); + program.with_setup(BasicProgramSetup); + program.with_dispatcher(AddDispatcherCommand); + + let render_result = program.exec_without_render().await.unwrap(); + println!("{}", render_result); +} + +gen_program!(MinglingCLI); -- cgit