public Ulimit unmarshall(JsonUnmarshallerContext context) throws Exception {
    Ulimit ulimit = new Ulimit();

    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();
          ulimit.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("softLimit", targetDepth)) {
          context.nextToken();
          ulimit.setSoftLimit(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("hardLimit", targetDepth)) {
          context.nextToken();
          ulimit.setHardLimit(IntegerJsonUnmarshaller.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 ulimit;
  }
  public Service unmarshall(JsonUnmarshallerContext context) throws Exception {
    Service service = new Service();

    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("serviceArn", targetDepth)) {
          context.nextToken();
          service.setServiceArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("serviceName", targetDepth)) {
          context.nextToken();
          service.setServiceName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("clusterArn", targetDepth)) {
          context.nextToken();
          service.setClusterArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("loadBalancers", targetDepth)) {
          context.nextToken();
          service.setLoadBalancers(
              new ListUnmarshaller<LoadBalancer>(LoadBalancerJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("status", targetDepth)) {
          context.nextToken();
          service.setStatus(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("desiredCount", targetDepth)) {
          context.nextToken();
          service.setDesiredCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("runningCount", targetDepth)) {
          context.nextToken();
          service.setRunningCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("pendingCount", targetDepth)) {
          context.nextToken();
          service.setPendingCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("taskDefinition", targetDepth)) {
          context.nextToken();
          service.setTaskDefinition(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("deployments", targetDepth)) {
          context.nextToken();
          service.setDeployments(
              new ListUnmarshaller<Deployment>(DeploymentJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("roleArn", targetDepth)) {
          context.nextToken();
          service.setRoleArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("events", targetDepth)) {
          context.nextToken();
          service.setEvents(
              new ListUnmarshaller<ServiceEvent>(ServiceEventJsonUnmarshaller.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 service;
  }