public ListClustersResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ListClustersResult listClustersResult = new ListClustersResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Clusters", targetDepth)) {
          context.nextToken();
          listClustersResult.setClusters(
              new ListUnmarshaller<ClusterSummary>(ClusterSummaryJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Marker", targetDepth)) {
          context.nextToken();
          listClustersResult.setMarker(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return listClustersResult;
  }
  public InstanceTimeline unmarshall(JsonUnmarshallerContext context) throws Exception {
    InstanceTimeline instanceTimeline = new InstanceTimeline();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("CreationDateTime", targetDepth)) {
          context.nextToken();
          instanceTimeline.setCreationDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ReadyDateTime", targetDepth)) {
          context.nextToken();
          instanceTimeline.setReadyDateTime(DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("EndDateTime", targetDepth)) {
          context.nextToken();
          instanceTimeline.setEndDateTime(DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return instanceTimeline;
  }
  public Command unmarshall(JsonUnmarshallerContext context) throws Exception {
    Command command = new Command();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          command.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ScriptPath", targetDepth)) {
          context.nextToken();
          command.setScriptPath(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Args", targetDepth)) {
          command.setArgs(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return command;
  }
  public StepStatus unmarshall(JsonUnmarshallerContext context) throws Exception {
    StepStatus stepStatus = new StepStatus();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("State", targetDepth)) {
          context.nextToken();
          stepStatus.setState(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("StateChangeReason", targetDepth)) {
          context.nextToken();
          stepStatus.setStateChangeReason(
              StepStateChangeReasonJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Timeline", targetDepth)) {
          context.nextToken();
          stepStatus.setTimeline(StepTimelineJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return stepStatus;
  }
  public JobFlowExecutionStatusDetail unmarshall(JsonUnmarshallerContext context) throws Exception {
    JobFlowExecutionStatusDetail jobFlowExecutionStatusDetail = new JobFlowExecutionStatusDetail();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("State", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setState(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CreationDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setCreationDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("StartDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setStartDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ReadyDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setReadyDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("EndDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setEndDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LastStateChangeReason", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setLastStateChangeReason(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return jobFlowExecutionStatusDetail;
  }
  public InstanceGroupDetail unmarshall(JsonUnmarshallerContext context) throws Exception {
    InstanceGroupDetail instanceGroupDetail = new InstanceGroupDetail();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("InstanceGroupId", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setInstanceGroupId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Market", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setMarket(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("InstanceRole", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setInstanceRole(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("BidPrice", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setBidPrice(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("InstanceType", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setInstanceType(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("InstanceRequestCount", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setInstanceRequestCount(
              context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("InstanceRunningCount", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setInstanceRunningCount(
              context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("State", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setState(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("LastStateChangeReason", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setLastStateChangeReason(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("CreationDateTime", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setCreationDateTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("StartDateTime", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setStartDateTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("ReadyDateTime", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setReadyDateTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("EndDateTime", targetDepth)) {
          context.nextToken();
          instanceGroupDetail.setEndDateTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return instanceGroupDetail;
  }
  public BootstrapActionConfig unmarshall(JsonUnmarshallerContext context) throws Exception {
    BootstrapActionConfig bootstrapActionConfig = new BootstrapActionConfig();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          bootstrapActionConfig.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ScriptBootstrapAction", targetDepth)) {
          context.nextToken();
          bootstrapActionConfig.setScriptBootstrapAction(
              ScriptBootstrapActionConfigJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return bootstrapActionConfig;
  }