diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-28 22:39:59 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-28 22:39:59 +0800 |
| commit | 85ee549f68449bc70a7f1271a93ad26a8207ee40 (patch) | |
| tree | bfb0b678d0f96c06b196417fd612a9cad2baf7fe /docs/pages/2-basic/4-chain.md | |
| parent | 5bf4209bd138faf76e3bd316fdfa128a08f2bb2e (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.md | 75 |
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) |
