aboutsummaryrefslogtreecommitdiff
path: root/docs/pages/2-basic/4-chain.md
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-28 22:39:59 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-28 22:39:59 +0800
commit85ee549f68449bc70a7f1271a93ad26a8207ee40 (patch)
treebfb0b678d0f96c06b196417fd612a9cad2baf7fe /docs/pages/2-basic/4-chain.md
parent5bf4209bd138faf76e3bd316fdfa128a08f2bb2e (diff)
Rebuild and rewrite the documentation site infrastructure
Diffstat (limited to 'docs/pages/2-basic/4-chain.md')
-rw-r--r--docs/pages/2-basic/4-chain.md75
1 files changed, 0 insertions, 75 deletions
diff --git a/docs/pages/2-basic/4-chain.md b/docs/pages/2-basic/4-chain.md
deleted file mode 100644
index d47642a..0000000
--- a/docs/pages/2-basic/4-chain.md
+++ /dev/null
@@ -1,75 +0,0 @@
-<h1 align="center">Chain</h1>
-<p align="center">
- Mingling's Basic Components
-</p>
-
----
-
-## Intro
-
-Like `Dispatcher`, `Chain` is also a core concept in building the entire **Mingling** framework. It is used to receive a dispatch of one type and convert it into another type.
-
-```rust
-dispatcher!("hello",
- HelloCommand => HelloEntry);
-
-// Define intermediate type ParsedHello, internally a String
-pack!(ParsedHello = String);
-
-// Define chain parse_hello (expands to ParseHello)
-// Declare conversion from HelloEntry
-#[chain]
-fn parse_hello(prev: HelloEntry) -> NextProcess {
- // Take the inner reference of HelloEntry
- let args = &*prev;
-
- // Extract the first argument, use default value "World"
- // if it doesn't exist
- let first = args.first().cloned().unwrap_or_else(|| "World".to_string());
-
- // Pack the extracted argument into ParsedHello and
- // dispatch to the next chain
- ParsedHello::new(first).to_chain()
-}
-```
-
-> [!Tip]
-> `NextProcess` is a marker type in **Mingling**, from `mingling::marker`.
->
-> It serves no functional purpose other than to simplify the declaration of chain functions. After the `chain!` macro expands, `NextProcess` will be replaced with `mingling::ChainProcess<ThisProgram>`.
-
-## Manual Impl
-
-You can also manually implement the basic `Chain` for finer control.
-
-However, please note that within the `chain!` macro, a `register_type!` macro is executed. This macro does not expand to any content; it only informs the `gen_program` context that this type exists.
-
-```rust
-dispatcher!("hello",
- HelloCommand => HelloEntry);
-
-pack!(ParsedHello = String);
-
-struct ParseHello;
-impl Chain<ThisProgram> for ParseHello {
- type Previous = HelloEntry;
- fn proc(prev: Self::Previous)
- -> ChainProcess<ThisProgram>
- {
- let args = &*prev;
- let first = args
- .first()
- .cloned()
- .unwrap_or_else(||
- "World".to_string()
- );
- ParsedHello::new(first).to_chain()
- }
-}
-
-// Register chain to the context
-register_chain!(HelloEntry, ParseHello);
-```
-
-## 💡 Next Page
-> **Basic Component** - Renderer [Go](./pages/2-basic/5-renderer)