public final GameState nextState() throws IOException {

    Board board = null;
    PlayerState pState = new PlayerState();
    int turn = 0;
    Duration d = null;
    String message = "";

    jsonReader.beginObject();
    while (jsonReader.hasNext()) {
      if (jsonReader.peek() == JsonToken.END_DOCUMENT) {
        hasNext = false;
        return null;
      }
      String name = jsonReader.nextName();

      if (pState.setField(name, jsonReader)) {
        continue;
      }

      if (name.equals("Board")) {
        board = new Board(jsonReader);
      } else if (name.equals("Turn")) {
        turn = jsonReader.nextInt();
      } else if (name.equals("TurnDuration")) {
        d = new Duration(jsonReader.nextLong());
      } else if (name.equals("Message")){
        message = jsonReader.nextString();
      } else {
        jsonReader.skipValue();
      }
    }
    jsonReader.endObject();

    return newState(board, pState, turn, d, message);
  }