decodeDeck method
Decodes card references into a deck.
The first card reference must be a leader, the second must be a base, and the rest must be cards. A valid Deck must be returned, or an error will be thrown.
Implementation
Deck decodeDeck(Iterable<CardReference> references) {
final refs = references.toList();
final cards = refs.map(_decodeCard).toList();
final leader = cards.removeAt(0);
if (leader is! LeaderCard) {
throw ArgumentError.value(
leader,
'leader',
'First card must be a leader',
);
}
final base = cards.removeAt(0);
if (base is! BaseCard) {
throw ArgumentError.value(
base,
'base',
'Second card must be a base',
);
}
return Deck(
leader: leader,
base: base,
cards: [
for (var i = 0; i < cards.length; i++)
for (var j = 0; j < refs[i + 2].quantity; j++)
cards[i] as PlayableCard,
],
);
}