aboutsummaryrefslogtreecommitdiff
path: root/docs/dev/pages/issues/t1_modify-dispatcher-syntax.md
blob: f1a9346b098f6060207645988fe701e8f465f59d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<h1 align="center">[T1] Modify the dispatcher! Syntax</h1>
<p align="center">
    Breaking: drop the <code>CMD*</code> struct from the explicit form of <code>dispatcher!</code>
</p>

> [!NOTE]
>
> This is a **Breaking Change** planned for Mingling 0.5.0, and it depends on [Remove with_dispatcher and with_dispatchers](t0_remove-with-dispatcher).

## Background

Once `Dispatcher` registration is compile-time collected (see [Remove with_dispatcher and with_dispatchers](t0_remove-with-dispatcher)), the `CMD*` struct becomes unnecessary — it only existed to give `with_dispatcher` something to register.

## Plan

Simplify the `dispatcher!` syntax: the explicit form no longer creates a `CMD*` struct, so only the entry type needs to be given.

```rust
// Before
dispatcher!("command", CMDCommand => EntryCommand);
 
// After
dispatcher!("command", EntryCommand);
 
// NOTE: The implicit mode is not affected
```
 
## Tasks

- [ ] Update `dispatcher!` to accept the simplified explicit form (`"name", EntryType`)
- [ ] Decide whether the old `CMDType => EntryType` form should error with a helpful message or be removed outright
- [ ] Remove the generated `CMD*` struct machinery
- [ ] Update `#[command]` macro internals that depend on `CMD*`
- [ ] Migrate examples, tests, and docs
- [ ] Keep the implicit mode (`dispatcher!("name")`) working unchanged

## 🕘 Progress

- [ ] In Progress
- [ ] Complete

<p align="center" style="font-size: 0.85em; color: gray;">
    Written by @Weicao-CatilGrass
</p>