diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java index ef49c8bc8f4d..a062e7d6df15 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java @@ -448,13 +448,21 @@ public Map postProcessOperationsWithModels(Map o for (CodegenParameter p : op.allParams) { p.vendorExtensions.put("x-go-example", constructExampleCode(p, modelMaps, processedModelMaps)); } + processedModelMaps.clear(); } - processedModelMaps.clear(); for (CodegenOperation operation : operationList) { + boolean needTimeImport = false; for (CodegenParameter cp : operation.allParams) { cp.vendorExtensions.put("x-go-example", constructExampleCode(cp, modelMaps, processedModelMaps)); + if (cp.isDateTime || cp.isDate) { // datetime or date + needTimeImport = true; + } + } + if (needTimeImport) { + operation.vendorExtensions.put("x-go-import", " \"time\""); } + processedModelMaps.clear(); } return objs; @@ -462,12 +470,22 @@ public Map postProcessOperationsWithModels(Map o private String constructExampleCode(CodegenParameter codegenParameter, HashMap modelMaps, HashMap processedModelMap) { if (codegenParameter.isArray) { // array - return codegenParameter.dataType + "{" + constructExampleCode(codegenParameter.items, modelMaps, processedModelMap) + "}"; + String prefix = codegenParameter.dataType; + String dataType = StringUtils.removeStart(codegenParameter.dataType, "[]"); + if (modelMaps.containsKey(dataType)) { + prefix = "[]" + goImportAlias + "." + dataType; + } + return prefix + "{" + constructExampleCode(codegenParameter.items, modelMaps, processedModelMap) + "}"; } else if (codegenParameter.isMap) { - return codegenParameter.dataType + "{ \"key\": " + constructExampleCode(codegenParameter.items, modelMaps, processedModelMap) + "}"; + String prefix = codegenParameter.dataType; + String dataType = StringUtils.removeStart(codegenParameter.dataType, "map[string][]"); + if (modelMaps.containsKey(dataType)) { + prefix = "map[string][]" + goImportAlias + "." + dataType; + } + return prefix + "{\"key\": " + constructExampleCode(codegenParameter.items, modelMaps, processedModelMap) + "}"; } else if (codegenParameter.isPrimitiveType) { // primitive type if (codegenParameter.isString) { - if (StringUtils.isEmpty(codegenParameter.example)) { + if (!StringUtils.isEmpty(codegenParameter.example) && codegenParameter.example != "null") { return "\"" + codegenParameter.example + "\""; } else { return "\"" + codegenParameter.paramName + "_example\""; @@ -482,11 +500,13 @@ private String constructExampleCode(CodegenParameter codegenParameter, HashMap modelMaps, HashMap processedModelMap) { if (codegenProperty.isArray) { // array - return codegenProperty.dataType + "{" + constructExampleCode(codegenProperty.items, modelMaps, processedModelMap) + ")"; + String prefix = codegenProperty.dataType; + String dataType = StringUtils.removeStart(codegenProperty.dataType, "[]"); + if (modelMaps.containsKey(dataType)) { + prefix = "[]" + goImportAlias + "." + dataType; + } + return prefix + "{" + constructExampleCode(codegenProperty.items, modelMaps, processedModelMap) + "}"; } else if (codegenProperty.isMap) { // map - return codegenProperty.dataType + "{ \"key\": " + constructExampleCode(codegenProperty.items, modelMaps, processedModelMap) + "}"; + String prefix = codegenProperty.dataType; + String dataType = StringUtils.removeStart(codegenProperty.dataType, "map[string][]"); + if (modelMaps.containsKey(dataType)) { + prefix = "map[string][]" + goImportAlias + "." + dataType; + } + return prefix + "{\"key\": " + constructExampleCode(codegenProperty.items, modelMaps, processedModelMap) + "}"; } else if (codegenProperty.isPrimitiveType) { // primitive type if (codegenProperty.isString) { - if (StringUtils.isEmpty(codegenProperty.example)) { + if (!StringUtils.isEmpty(codegenProperty.example) && codegenProperty.example != "null") { return "\"" + codegenProperty.example + "\""; } else { return "\"" + codegenProperty.name + "_example\""; @@ -524,17 +554,13 @@ private String constructExampleCode(CodegenProperty codegenProperty, HashMap modelMaps, HashMap processedModelMap) { - String example; - // break infinite recursion. Return, in case a model is already processed in the current context. String model = codegenModel.name; if (processedModelMap.containsKey(model)) { @@ -561,6 +585,14 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap allowableValues = codegenModel.allowableValues; + List values = (List) allowableValues.get("values"); + return goImportAlias + "." + model + "(\"" + String.valueOf(values.get(0)) + "\")"; + } else if (codegenModel.oneOf != null && !codegenModel.oneOf.isEmpty()) { + String subModel = (String) codegenModel.oneOf.toArray()[0]; + String oneOf = constructExampleCode(modelMaps.get(subModel), modelMaps, processedModelMap).substring(1); + return goImportAlias + "." + model + "{" + subModel + ": " + oneOf + "}"; } else { processedModelMap.put(model, 1); } @@ -569,6 +601,6 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap