private static boolean processCommand(CommandTarget commandTarget, StringBuilder structFile) {

    StringBuilder structString = new StringBuilder();
    try {
      int paramNumber = 1;
      String command = commandTarget.getCommandName();
      List<Argument> arguments = commandTarget.getOptionParser().getArguments();
      List<Option> options = commandTarget.getOptionParser().getOptions();

      structString.append("\nstruct " + getProperName(command, STRUCT_NAME) + " {\n");

      // This is to ensure at least one non-optional fields
      structString
          .append("\t")
          .append(paramNumber++)
          .append(":")
          .append("i16 argsId=")
          .append(argsCounter.incrementAndGet())
          .append(",\n");

      for (int i = 0; i < arguments.size(); i++) {
        Argument argument = arguments.get(i);
        structString
            .append("\t")
            .append(paramNumber++)
            .append(":")
            .append(" string ")
            .append(getProperName(argument.getArgumentName(), STRUCT_FIELD_NAME));
        if (options.size() > 0) structString.append(",\n");
        else structString.append("\n");
      }

      for (int i = 0; i < options.size(); i++) {
        Option option = options.get(i);
        String thriftType = getThriftDataType(option.getDataType());
        String thriftName = getProperName(option.getLongOption(), STRUCT_FIELD_NAME);
        structString
            .append("\t")
            .append(paramNumber++)
            .append(":")
            .append((option.isRequired() ? "" : "optional "))
            .append(thriftType)
            .append(" ")
            .append(thriftName);

        String defaultValue = option.getUnspecifiedDefaultValue();
        if (defaultValue != null && isNumericStringOrBoolean(option.getDataType())) {
          // Check for numeric or string and boolean dont allow collections
          structString
              .append(" = ")
              .append(quoteStringOptionValue(defaultValue, option.getDataType()));
        }

        if (i < options.size() - 1) structString.append(",\n");
        else structString.append("\n");

        allKindsType.add(option.getDataType().getSimpleName());
      }
      structString.append("\n}\n");
      structFile.append(structString.toString());
      return true;
    } catch (RuntimeException e) {
      System.out.println(
          "Command " + commandTarget.getCommandName() + " not supported bcoz " + e.getMessage());
      e.printStackTrace();
      return false;
    }
  }
 private static boolean argsStructRequired(CommandTarget tgr) {
   if ((tgr.getOptionParser().getArguments().size() + tgr.getOptionParser().getOptions().size())
       > 0) return true;
   else return false;
 }