//! `Mingling` Example - Basic //! //! # How to Run //! ```bash //! cargo run --manifest-path ./examples/example-basic/Cargo.toml -- hello World //! ``` use mingling::{ macros::{chain, dispatcher, gen_program, pack, r_println, renderer}, marker::NextProcess, }; // Define dispatcher `HelloCommand`, directing subcommand "hello" to `HelloEntry` dispatcher!("hello", HelloCommand => HelloEntry); #[tokio::main] async fn main() { // Create program let mut program = DefaultProgram::new(); // Add dispatcher `HelloCommand` program.with_dispatcher(HelloCommand); // Run program program.exec().await; } // Register wrapper type `Hello`, setting inner to `String` pack!(Hello = String); // Register chain to `DefaultProgram`, handling logic from `HelloEntry` #[chain] async fn parse_name(prev: HelloEntry) -> NextProcess { // Extract string from `HelloEntry` as argument let name = prev.first().cloned().unwrap_or_else(|| "World".to_string()); // Build `Hello` type and route to renderer Hello::new(name).to_render() } // Register renderer to `DefaultProgram`, handling rendering of `Hello` #[renderer] fn render_hello_who(prev: Hello) { // Print message r_println!("Hello, {}!", *prev); // Program ends here } // Generate program, default is `DefaultProgram` gen_program!();