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 = Picker::new(args.inner); let dispatcher_name = picker.pick::(()).unpack_directly().0; let input = AddDispatcherInput::new(dispatcher_name); input.into() } #[chain] pub async fn parse_remove_dispatcher(args: RemoveDispatcherEntry) -> 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!(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); }