diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-08-17 05:49:19 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-08-17 05:49:19 +0800 |
| commit | 57c53affe3542cb6bd4e79ee4c18f20a1bd76b2d (patch) | |
| tree | 1cd4aef44cb7a45a8cd9d520b598f5f181e24c76 /examples/example-basic/src | |
| parent | ef23cd944402939605c78a4a853ef6e33af02c21 (diff) | |
refactor!: replace pack! macros with derive-based pipeline types
Remove the `pack!`, `pack_err!`, `pack_structural!`, and
`pack_err_structural!` macros, replacing all pipeline type definitions
with `#[derive(Grouped)]` and `#[derive(Grouped, Wrap)]` attributes.
This changes the generated struct shape from named-field structs with an
`inner` field to tuple structs accessed via `.0`, and removes the
auto-generated `name` and `info` fields from error types.
Diffstat (limited to 'examples/example-basic/src')
| -rw-r--r-- | examples/example-basic/src/main.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/examples/example-basic/src/main.rs b/examples/example-basic/src/main.rs index 44736ad..ce41b2d 100644 --- a/examples/example-basic/src/main.rs +++ b/examples/example-basic/src/main.rs @@ -17,11 +17,11 @@ use mingling::prelude::*; use std::io::Write; // Define the `greet` subcommand -// _____________________________ subcmd name, can be nested (e.g. "remote.add" "remote.rm") -// / _____________________ dispatcher name -// | / _________ entry, records raw arguments -// | | / ^^^^^^^^^^^^^ -// vvvvv vvvvvvvv vvvvvvvvvv \_ equivalent to pack!(EntryGreet = Vec<String>) +// _________________ subcmd name, can be nested (e.g. "remote.add" "remote.rm") +// / +// | _________ entry, records raw arguments +// | / ^^^^^^^^^^^^^ +// vvvvv vvvvvvvvvv \_ a newtype wrapper around Vec<String> dispatcher!("greet", EntryGreet); fn main() { @@ -33,21 +33,22 @@ fn main() { } // Quickly wrap a type into a type recognizable by the current program -// ____________________ Wrapped type name -// / _______ Wrapped type inner value -// | / -// vvvvvvvvvv vvvvvv -pack!(ResultName = String); +// ___________________ Registers this type into ThisProgram +// / _______ Adds DerefMut, Deref, Into, From wrappers +// | / +// vvvvvvvvvv vvvvv +#[derive(Grouped, Wrap)] +pub struct ResultName(String); // Define the `handle_greet` chain for parsing input text // ____________________ Previous type: // / Mingling deduces types at runtime and routes them to this function // | _____ will be expanded to: -// | / impl Into<mingling::ChainProcess<ThisProgram>> +// | / ChainProcess<ThisProgram> #[chain] // vvvvvvvvvv vvvv fn handle_greet(args: EntryGreet) -> Next { let name: ResultName = args - .inner + .0 .first() .cloned() .unwrap_or_else(|| "World".to_string()) |
