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.rs69
1 files changed, 69 insertions, 0 deletions
diff --git a/mingling/src/example_docs.rs b/mingling/src/example_docs.rs
index 31a298f..519c5cc 100644
--- a/mingling/src/example_docs.rs
+++ b/mingling/src/example_docs.rs
@@ -65,6 +65,75 @@
/// gen_program!();
/// ```
pub mod example_basic {}
+/// `Mingling` Example - Async
+///
+/// After enabling the `async` feature:
+/// 1. The `chain!` macro will support using **async** functions,
+/// 2. The `exec` function of `Program` will return a `Future` for you to use with an async runtime
+///
+/// ## Enable Feature
+/// Enable the `async` feature for mingling in `Cargo.toml`
+/// ```toml
+/// [dependencies]
+/// mingling = { version = "...", features = ["async"] }
+/// ```
+///
+/// # How to Run
+/// ```bash
+/// cargo run --manifest-path ./examples/example-async/Cargo.toml -- hello World
+/// ```
+///
+/// Cargo.toml
+/// ```ignore
+/// [package]
+/// name = "example-async"
+/// version = "0.0.1"
+/// edition = "2024"
+///
+/// [dependencies]
+/// tokio = { version = "1", features = ["full"] }
+/// mingling = { path = "../../mingling", features = ["async"] }
+/// ```
+///
+/// main.rs
+/// ```ignore
+/// use mingling::{
+/// macros::{chain, dispatcher, gen_program, pack, r_println, renderer},
+/// marker::NextProcess,
+/// };
+///
+/// dispatcher!("hello", HelloCommand => HelloEntry);
+///
+/// // Use Tokio async runtime
+/// #[tokio::main]
+/// async fn main() {
+/// let mut program = ThisProgram::new();
+/// program.with_dispatcher(HelloCommand);
+///
+/// // Run program
+/// program.exec().await;
+/// }
+///
+/// pack!(Hello = String);
+///
+/// // You can freely use async / non-async functions to declare your Chain
+///
+/// #[chain]
+/// // fn parse_name(prev: HelloEntry) -> NextProcess {
+/// async fn parse_name(prev: HelloEntry) -> NextProcess {
+/// let name = prev.first().cloned().unwrap_or_else(|| "World".to_string());
+/// Hello::new(name).to_render()
+/// }
+///
+/// // For renderers, you can still only use synchronous functions
+/// #[renderer]
+/// fn render_hello_who(prev: Hello) {
+/// r_println!("Hello, {}!", *prev);
+/// }
+///
+/// gen_program!();
+/// ```
+pub mod example_async {}
/// `Mingling` Example - Completion
///
/// # How to Deploy