decodeDeck method

Deck decodeDeck(
  1. Iterable<CardReference> references
)

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,
    ],
  );
}