aboutsummaryrefslogtreecommitdiff
path: root/mingling/src/example_docs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling/src/example_docs.rs')
-rw-r--r--mingling/src/example_docs.rs90
1 files changed, 90 insertions, 0 deletions
diff --git a/mingling/src/example_docs.rs b/mingling/src/example_docs.rs
index 35cf024..3e9bd26 100644
--- a/mingling/src/example_docs.rs
+++ b/mingling/src/example_docs.rs
@@ -768,6 +768,96 @@ pub mod example_clap_binding {}
/// gen_program!();
/// ```
pub mod example_combine_pathf_dispatch_tree {}
+/// Example Command Macro
+///
+/// > Introduced how to use the `#[command]` macro to generate commands with minimal boilerplate
+///
+/// Run:
+/// ```base
+/// cargo run --manifest-path examples/example-command-macro/Cargo.toml --quiet -- hello world
+/// cargo run --manifest-path examples/example-command-macro/Cargo.toml --quiet -- greet-someone Alice
+/// cargo run --manifest-path examples/example-command-macro/Cargo.toml --quiet -- goodbye
+/// ```
+///
+/// Output:
+/// ```plaintext
+/// Hello, World
+/// Hello, Alice
+/// Goodbye!
+/// ```
+///
+/// Source code (./Cargo.toml)
+/// ```toml
+/// [package]
+/// name = "example-command-macro"
+/// version = "0.1.0"
+/// edition = "2024"
+///
+/// [dependencies.mingling]
+/// path = "../../mingling"
+/// features = [
+/// # Use `extra_macros` to introduce the `#[command]` macro
+/// "extra_macros",
+///
+/// # Use `picker` to parse arguments
+/// "picker",
+/// ]
+///
+/// [workspace]
+/// ```
+///
+/// Source code (./src/main.rs)
+/// ```ignore
+/// use mingling::{macros::buffer, picker::IntoPicker, prelude::*};
+///
+/// fn main() {
+/// let mut program = ThisProgram::new();
+///
+/// // Import the dispatchers generated by the `#[command]` macro
+/// program.with_dispatcher(CMDHelloWorld);
+/// program.with_dispatcher(CMDGreetSomeone);
+/// program.with_dispatcher(CMDGoodBye);
+///
+/// program.exec_and_exit();
+/// }
+///
+/// pack!(ResultGreeting = String);
+/// pack!(ResultGoodbye = ());
+///
+/// // --------- IMPORTANT ---------
+/// // Auto-generates dispatcher!("hello.world", CMDHelloWorld => EntryHelloWorld);
+/// #[command]
+/// fn hello_world() -> ResultGreeting {
+/// ResultGreeting::new("World".to_string())
+/// }
+///
+/// // Auto-generates dispatcher!("hello-world", CMDGreetSomeone => EntryGreetSomeone);
+/// #[command(node = "greet-someone")]
+/// fn greet_someone(args: Vec<String>) -> ResultGreeting {
+/// let name = args.pick_or(&arg![String], || "World".to_string()).unwrap();
+/// ResultGreeting::new(name)
+/// }
+///
+/// // Auto-generates dispatcher!("goodbye", CMDGoodBye => EntryGoodBye);
+/// #[command(name = CMDGoodBye, entry = EntryGoodBye)]
+/// fn goodbye() -> ResultGoodbye {
+/// ResultGoodbye::default()
+/// }
+/// // --------- IMPORTANT ---------
+///
+/// #[renderer(buffer)]
+/// fn render_greeting(result: ResultGreeting) {
+/// r_println!("Hello, {}", *result);
+/// }
+///
+/// #[renderer(buffer)]
+/// fn render_goodbye(_: ResultGoodbye) {
+/// r_println!("Goodbye!");
+/// }
+///
+/// gen_program!();
+/// ```
+pub mod example_command_macro {}
/// Example Completion
///
/// > This example demonstrates how to use **Mingling** to create fully dynamic command-line completions