make types within generate_solution_type macro explicit (#8447)

* make types within `generate_solution_type` macro explicit

Closes #8444.

Just changes the parsing logic for that macro; does not change any
emitted code. The associated types associated with the macro now
require explicit, keyword-style declaration.

**Old**:

```rust
sp_npos_elections::generate_solution_type!(
	#[compact]
	pub struct TestCompact::<VoterIndex, TargetIndex, PerU16>(16)
);
```

**New**:

```rust
sp_npos_elections::generate_solution_type!(
	#[compact]
	pub struct TestCompact::<VoterIndex = VoterIndex, CandidateIndex = TargetIndex, Accuracy = PerU16>(16)
);
```

* un-ignore doc-tests

* use new form in bin/node/runtime/

* rename CandidateIndex -> TargetIndex

* add tests demonstrating some potential compile failures
This commit is contained in:
Peter Goodspeed-Niklaus
2021-03-28 10:21:06 +02:00
committed by GitHub
parent 2af0de50c9
commit c2dd5e21a4
17 changed files with 145 additions and 16 deletions
@@ -0,0 +1,9 @@
use sp_npos_elections_compact::generate_solution_type;
generate_solution_type!(pub struct TestSolution::<
VoterIndex = u16,
TargetIndex = u8,
Perbill,
>(8));
fn main() {}
@@ -0,0 +1,5 @@
error: Expected binding: `Accuracy = ...`
--> $DIR/missing_accuracy.rs:6:2
|
6 | Perbill,
| ^^^^^^^
@@ -0,0 +1,9 @@
use sp_npos_elections_compact::generate_solution_type;
generate_solution_type!(pub struct TestSolution::<
VoterIndex = u16,
u8,
Accuracy = Perbill,
>(8));
fn main() {}
@@ -0,0 +1,5 @@
error: Expected binding: `TargetIndex = ...`
--> $DIR/missing_target.rs:5:2
|
5 | u8,
| ^^
@@ -0,0 +1,9 @@
use sp_npos_elections_compact::generate_solution_type;
generate_solution_type!(pub struct TestSolution::<
u16,
TargetIndex = u8,
Accuracy = Perbill,
>(8));
fn main() {}
@@ -0,0 +1,5 @@
error: Expected binding: `VoterIndex = ...`
--> $DIR/missing_voter.rs:4:2
|
4 | u16,
| ^^^
@@ -0,0 +1,9 @@
use sp_npos_elections_compact::generate_solution_type;
generate_solution_type!(pub struct TestSolution::<
u16,
u8,
Perbill,
>(8));
fn main() {}
@@ -0,0 +1,5 @@
error: Expected binding: `VoterIndex = ...`
--> $DIR/no_annotations.rs:4:2
|
4 | u16,
| ^^^
@@ -0,0 +1,9 @@
use sp_npos_elections_compact::generate_solution_type;
generate_solution_type!(pub struct TestSolution::<
TargetIndex = u16,
VoterIndex = u8,
Accuracy = Perbill,
>(8));
fn main() {}
@@ -0,0 +1,5 @@
error: Expected `VoterIndex`
--> $DIR/swap_voter_target.rs:4:2
|
4 | TargetIndex = u16,
| ^^^^^^^^^^^