aboutsummaryrefslogtreecommitdiff
path: root/docs/dev/pages/issues/t0_remove-pack-macros.md
blob: 517646aea96d27d13f3c68ce28dbc5b33727bec7 (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
45
46
47
48
49
`<h1 align="center">[T0] Remove the pack! Family of Macros</h1>
<p align="center">
    Breaking: retire the entire <code>pack!</code> family in favor of the <code>Grouped</code> derive
</p>

> [!NOTE]
>
> This is a **Breaking Change** planned for Mingling 0.5.0.

## Background

Since the very first version of Mingling, the `pack!` macro has been around. Its purpose has gradually narrowed from "creating a type and registering it to Mingling" to "creating a newtype that derives Grouped". In other words, the functionality of `pack!` is gradually being replaced by the `Grouped derive`.

Furthermore, in 0.2.0, in order to accommodate `StructuralData derive`, Mingling introduced `pack_structural!` and `pack_err_structural!` variants all at once, which greatly increases the maintenance cost of the project.

## Plan

Remove the entire `pack!` family of macros (`pack!`, `pack_structural!`, `pack_err_structural!`) as a Breaking Change in 0.5.0.

All future type creation will be done as follows:

```rust
// Before
pack!(ResultNames = Vec<String>);
 
// After
#[derive(Grouped)]
pub struct ResultNames {
    names: Vec<String>
}
```
 
## Tasks

- [ ] Identify all usages of `pack!` / `pack_structural!` / `pack_err_structural!` across the codebase, examples, and docs
- [ ] Migrate internal usages to `#[derive(Grouped)]`
- [ ] Remove the macro definitions and their re-exports
- [ ] Update the docs / helpdoc examples that reference `pack!`
- [ ] Update downstream feature docs (`structural_renderer` etc.) where `pack_structural!` was involved
- [ ] Verify all tests pass

## 🕘 Progress

- [ ] In Progress
- [ ] Complete

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