private DeckData buildDeckData(Deck deck) {
    DeckData data = new DeckData();

    data.setName(deck.name());
    data.setIdentity(deck.getIdentity().key());

    List<CardEntry> entries = deck.cards();
    for (CardEntry cardEntry : entries) {
      data.addCardRef(cardEntry.getKey(), cardEntry.getCount());
    }
    return data;
  }
  @Override
  public void saveDeck(Deck deck) {
    String destinationName = deck.name();

    DeckData deckData = buildDeckData(deck);

    String deckDataString = gson.toJson(deckData);
    persist(destinationName, deckDataString);
  }
 @Override
 public Deck loadDeck(String name) {
   DeckData data;
   try {
     data = gson.fromJson(readSource(getDeckUri(name)), DeckData.class);
     CardLibrary cl = loadCardLibrary();
     Card identityCard = cl.getCard(data.getIdentity());
     Deck deck = new Deck(cl.getItentity(identityCard.getKey()), data.getName());
     for (CardRef ref : data.getCards()) {
       deck.add(cl.getCard(ref.getCard()), ref.getCount());
     }
     return deck;
   } catch (JsonIOException e) {
     e.printStackTrace();
   } catch (JsonSyntaxException e) {
     e.printStackTrace();
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   }
   return null;
 }