Skip to content

Commit c078d2f

Browse files
olanodpandres95
andauthored
Change pallet referenda TracksInfo::tracks to return an iterator (#2072)
Returning an iterator in `TracksInfo::tracks()` instead of a static slice allows for more flexible implementations of `TracksInfo` that can use the chain storage without compromising a lot on the performance/memory penalty if we were to return an owned `Vec` instead. --------- Co-authored-by: Pablo Andrés Dorado Suárez <hola@pablodorado.com>
1 parent 8cca727 commit c078d2f

File tree

12 files changed

+592
-524
lines changed

12 files changed

+592
-524
lines changed

cumulus/parachains/runtimes/collectives/collectives-westend/src/ambassador/tracks.rs

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
1818
use super::Origin;
1919
use crate::{Balance, BlockNumber, RuntimeOrigin, DAYS, DOLLARS, HOURS};
20-
use sp_runtime::Perbill;
20+
use sp_runtime::{str_array as s, Perbill};
21+
use sp_std::borrow::Cow;
2122

2223
/// Referendum `TrackId` type.
2324
pub type TrackId = u16;
@@ -46,13 +47,15 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
4647

4748
type RuntimeOrigin = <RuntimeOrigin as frame_support::traits::OriginTrait>::PalletsOrigin;
4849

49-
/// Return the array of available tracks and their information.
50-
fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo<Balance, BlockNumber>)] {
51-
static DATA: [(TrackId, pallet_referenda::TrackInfo<Balance, BlockNumber>); 9] = [
52-
(
53-
constants::AMBASSADOR_TIER_1,
54-
pallet_referenda::TrackInfo {
55-
name: "ambassador tier 1",
50+
/// Return the list of available tracks and their information.
51+
fn tracks(
52+
) -> impl Iterator<Item = Cow<'static, pallet_referenda::Track<Self::Id, Balance, BlockNumber>>>
53+
{
54+
static DATA: [pallet_referenda::Track<TrackId, Balance, BlockNumber>; 9] = [
55+
pallet_referenda::Track {
56+
id: constants::AMBASSADOR_TIER_1,
57+
info: pallet_referenda::TrackInfo {
58+
name: s("ambassador tier 1"),
5659
max_deciding: 10,
5760
decision_deposit: 5 * DOLLARS,
5861
prepare_period: 24 * HOURS,
@@ -70,11 +73,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
7073
ceil: Perbill::from_percent(50),
7174
},
7275
},
73-
),
74-
(
75-
constants::AMBASSADOR_TIER_2,
76-
pallet_referenda::TrackInfo {
77-
name: "ambassador tier 2",
76+
},
77+
pallet_referenda::Track {
78+
id: constants::AMBASSADOR_TIER_2,
79+
info: pallet_referenda::TrackInfo {
80+
name: s("ambassador tier 2"),
7881
max_deciding: 10,
7982
decision_deposit: 5 * DOLLARS,
8083
prepare_period: 24 * HOURS,
@@ -92,11 +95,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
9295
ceil: Perbill::from_percent(50),
9396
},
9497
},
95-
),
96-
(
97-
constants::SENIOR_AMBASSADOR_TIER_3,
98-
pallet_referenda::TrackInfo {
99-
name: "senior ambassador tier 3",
98+
},
99+
pallet_referenda::Track {
100+
id: constants::SENIOR_AMBASSADOR_TIER_3,
101+
info: pallet_referenda::TrackInfo {
102+
name: s("senior ambassador tier 3"),
100103
max_deciding: 10,
101104
decision_deposit: 5 * DOLLARS,
102105
prepare_period: 24 * HOURS,
@@ -114,11 +117,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
114117
ceil: Perbill::from_percent(50),
115118
},
116119
},
117-
),
118-
(
119-
constants::SENIOR_AMBASSADOR_TIER_4,
120-
pallet_referenda::TrackInfo {
121-
name: "senior ambassador tier 4",
120+
},
121+
pallet_referenda::Track {
122+
id: constants::SENIOR_AMBASSADOR_TIER_4,
123+
info: pallet_referenda::TrackInfo {
124+
name: s("senior ambassador tier 4"),
122125
max_deciding: 10,
123126
decision_deposit: 5 * DOLLARS,
124127
prepare_period: 24 * HOURS,
@@ -136,11 +139,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
136139
ceil: Perbill::from_percent(50),
137140
},
138141
},
139-
),
140-
(
141-
constants::HEAD_AMBASSADOR_TIER_5,
142-
pallet_referenda::TrackInfo {
143-
name: "head ambassador tier 5",
142+
},
143+
pallet_referenda::Track {
144+
id: constants::HEAD_AMBASSADOR_TIER_5,
145+
info: pallet_referenda::TrackInfo {
146+
name: s("head ambassador tier 5"),
144147
max_deciding: 10,
145148
decision_deposit: 5 * DOLLARS,
146149
prepare_period: 24 * HOURS,
@@ -158,11 +161,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
158161
ceil: Perbill::from_percent(50),
159162
},
160163
},
161-
),
162-
(
163-
constants::HEAD_AMBASSADOR_TIER_6,
164-
pallet_referenda::TrackInfo {
165-
name: "head ambassador tier 6",
164+
},
165+
pallet_referenda::Track {
166+
id: constants::HEAD_AMBASSADOR_TIER_6,
167+
info: pallet_referenda::TrackInfo {
168+
name: s("head ambassador tier 6"),
166169
max_deciding: 10,
167170
decision_deposit: 5 * DOLLARS,
168171
prepare_period: 24 * HOURS,
@@ -180,11 +183,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
180183
ceil: Perbill::from_percent(50),
181184
},
182185
},
183-
),
184-
(
185-
constants::HEAD_AMBASSADOR_TIER_7,
186-
pallet_referenda::TrackInfo {
187-
name: "head ambassador tier 7",
186+
},
187+
pallet_referenda::Track {
188+
id: constants::HEAD_AMBASSADOR_TIER_7,
189+
info: pallet_referenda::TrackInfo {
190+
name: s("head ambassador tier 7"),
188191
max_deciding: 10,
189192
decision_deposit: 5 * DOLLARS,
190193
prepare_period: 24 * HOURS,
@@ -202,11 +205,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
202205
ceil: Perbill::from_percent(50),
203206
},
204207
},
205-
),
206-
(
207-
constants::MASTER_AMBASSADOR_TIER_8,
208-
pallet_referenda::TrackInfo {
209-
name: "master ambassador tier 8",
208+
},
209+
pallet_referenda::Track {
210+
id: constants::MASTER_AMBASSADOR_TIER_8,
211+
info: pallet_referenda::TrackInfo {
212+
name: s("master ambassador tier 8"),
210213
max_deciding: 10,
211214
decision_deposit: 5 * DOLLARS,
212215
prepare_period: 24 * HOURS,
@@ -224,11 +227,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
224227
ceil: Perbill::from_percent(50),
225228
},
226229
},
227-
),
228-
(
229-
constants::MASTER_AMBASSADOR_TIER_9,
230-
pallet_referenda::TrackInfo {
231-
name: "master ambassador tier 9",
230+
},
231+
pallet_referenda::Track {
232+
id: constants::MASTER_AMBASSADOR_TIER_9,
233+
info: pallet_referenda::TrackInfo {
234+
name: s("master ambassador tier 9"),
232235
max_deciding: 10,
233236
decision_deposit: 5 * DOLLARS,
234237
prepare_period: 24 * HOURS,
@@ -246,9 +249,9 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
246249
ceil: Perbill::from_percent(50),
247250
},
248251
},
249-
),
252+
},
250253
];
251-
&DATA[..]
254+
DATA.iter().map(Cow::Borrowed)
252255
}
253256

254257
/// Determine the voting track for the given `origin`.
@@ -277,6 +280,3 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
277280
}
278281
}
279282
}
280-
281-
// implements [`frame_support::traits::Get`] for [`TracksInfo`]
282-
pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber);

0 commit comments

Comments
 (0)