From 6ce9cd237a46ac2032bfe548757b5558d54f027b Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Sun, 24 Mar 2019 11:30:52 -0700
Subject: [PATCH 1/8] Add inline enum definitions to go models. Prefix enum
 names to help avoid namespace collisions within a go package.

---
 .../codegen/languages/AbstractGoCodegen.java  | 13 +++++++++
 .../src/main/resources/go/model.mustache      | 27 +++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 3698b6d000e..6f696f006a2 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -487,6 +487,19 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
                         addedOSImport = true;
                     }
                 }
+                if (model.isEnum) {
+                    // For enum values prepend with var name to help prevent namespace collision
+                    String enumPrefix = toEnumVarName(model.name, model.dataType) + "_";
+                    List<Map<String, Object>> enumVars = (List<Map<String, Object>>) model.allowableValues.get("enumVars");
+                    if (enumVars != null) {
+                        for (Map<String, Object> enumVar : enumVars) {
+                            String enumName = (String) enumVar.get("name");
+                            if (enumName != null) {
+                                enumVar.put("name", enumPrefix + enumName);
+                            }
+                        }
+                    }
+                }
             }
         }
         // recursively add import for mapping one type to multiple imports
diff --git a/modules/openapi-generator/src/main/resources/go/model.mustache b/modules/openapi-generator/src/main/resources/go/model.mustache
index 1a9f8d1c5aa..a65cbcb1120 100644
--- a/modules/openapi-generator/src/main/resources/go/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go/model.mustache
@@ -35,9 +35,32 @@ type {{classname}} struct {
 {{#description}}
 	// {{{description}}}
 {{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
 }
 {{/isEnum}}
+{{! Define any inline enums from above}}
+{{#hasEnums}}
+{{#vars}}
+{{#isEnum}}
+
+{{#description}}
+// {{{name}}} : {{{description}}}
+{{/description}}
+type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+
+// List of {{classname}}{{nameInCamelCase}}
+const (
+	{{#allowableValues}}
+	{{#enumVars}}
+	{{^-first}}
+	{{/-first}}
+	{{datatypeWithEnum}}_{{name}} {{classname}}{{nameInCamelCase}} = "{{{value}}}"
+	{{/enumVars}}
+	{{/allowableValues}}
+)
+{{/isEnum}}
+{{/vars}}
+{{/hasEnums}}
 {{/model}}
-{{/models}}
+{{/models}}
\ No newline at end of file
-- 
GitLab


From 0648a1b11d290882695ed3f947cb184284180f37 Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Sun, 24 Mar 2019 12:26:43 -0700
Subject: [PATCH 2/8] Move enum prepend logic to post processing enum function

---
 .../codegen/languages/AbstractGoCodegen.java  | 39 ++++++++++++-------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 6f696f006a2..0c31604a19f 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -487,19 +487,6 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
                         addedOSImport = true;
                     }
                 }
-                if (model.isEnum) {
-                    // For enum values prepend with var name to help prevent namespace collision
-                    String enumPrefix = toEnumVarName(model.name, model.dataType) + "_";
-                    List<Map<String, Object>> enumVars = (List<Map<String, Object>>) model.allowableValues.get("enumVars");
-                    if (enumVars != null) {
-                        for (Map<String, Object> enumVar : enumVars) {
-                            String enumName = (String) enumVar.get("name");
-                            if (enumName != null) {
-                                enumVar.put("name", enumPrefix + enumName);
-                            }
-                        }
-                    }
-                }
             }
         }
         // recursively add import for mapping one type to multiple imports
@@ -520,6 +507,32 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
         return postProcessModelsEnum(objs);
     }
 
+    @Override
+    public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
+        objs = super.postProcessModelsEnum(objs);
+        
+        List<Object> models = (List<Object>) objs.get("models");
+        for (Object _mo : models) {
+            Map<String, Object> mo = (Map<String, Object>) _mo;
+            CodegenModel cm = (CodegenModel) mo.get("model");
+
+            if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) {
+                // For enum values prepend names with enum type name to help prevent namespace collision
+                String enumPrefix = toEnumVarName(cm.name, cm.dataType) + "_";
+                if (cm.allowableValues.get("enumVars") != null) {
+                    List<Map<String, Object>> enumVars = (List<Map<String, Object>>) cm.allowableValues.get("enumVars");
+                    for (Map<String, Object> enumVar : enumVars) {
+                        String enumName = (String) enumVar.get("name");
+                        if (enumName != null) {
+                            enumVar.put("name", enumPrefix + enumName);
+                        }
+                    }
+                }
+            }
+        }
+        return objs;
+    }
+
     @Override
     public Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs) {
         generateYAMLSpecFile(objs);
-- 
GitLab


From 55033dde2f0c3a09069ce8f84f53fddfebfe2e72 Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Sun, 24 Mar 2019 13:48:02 -0700
Subject: [PATCH 3/8] Fix inline enum prefixes for special cases.

---
 .../codegen/languages/AbstractGoCodegen.java  | 32 ++++++++++----
 .../src/main/resources/go/model.mustache      |  2 +-
 .../go/go-petstore/model_enum_arrays.go       | 20 ++++++++-
 .../go/go-petstore/model_enum_class.go        |  6 +--
 .../go/go-petstore/model_enum_test_.go        | 42 +++++++++++++++++--
 .../go/go-petstore/model_map_test_.go         | 10 ++++-
 .../petstore/go/go-petstore/model_order.go    | 12 +++++-
 .../go/go-petstore/model_outer_enum.go        |  6 +--
 .../petstore/go/go-petstore/model_pet.go      | 12 +++++-
 9 files changed, 117 insertions(+), 25 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 0c31604a19f..bd15ee1fac0 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -516,16 +516,17 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
             Map<String, Object> mo = (Map<String, Object>) _mo;
             CodegenModel cm = (CodegenModel) mo.get("model");
 
+            // For enum var names prepend with this model's name to help prevent namespace collision
             if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) {
-                // For enum values prepend names with enum type name to help prevent namespace collision
-                String enumPrefix = toEnumVarName(cm.name, cm.dataType) + "_";
-                if (cm.allowableValues.get("enumVars") != null) {
-                    List<Map<String, Object>> enumVars = (List<Map<String, Object>>) cm.allowableValues.get("enumVars");
-                    for (Map<String, Object> enumVar : enumVars) {
-                        String enumName = (String) enumVar.get("name");
-                        if (enumName != null) {
-                            enumVar.put("name", enumPrefix + enumName);
-                        }
+                String prefix = toEnumVarName(cm.name, cm.dataType) + "_";
+                cm.allowableValues = prefixAllowableValues(cm.allowableValues, prefix);
+            }
+            // Also prepend var names used for defining inline enums with inline enum's name
+            if (Boolean.TRUE.equals(cm.hasEnums)) {
+                for (CodegenProperty param : cm.vars) {
+                    if (param.isEnum && param.allowableValues != null) {
+                        String prefix = toEnumVarName(param.name, param.dataType) + "_";
+                        param.allowableValues = prefixAllowableValues(param.allowableValues, prefix);
                     }
                 }
             }
@@ -533,6 +534,19 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
         return objs;
     }
 
+    public Map<String, Object> prefixAllowableValues(Map<String, Object> allowableValues, String prefix) {
+        if (allowableValues.get("enumVars") != null) {
+            List<Map<String, Object>> enumVars = (List<Map<String, Object>>) allowableValues.get("enumVars");
+            for (Map<String, Object> enumVar : enumVars) {
+                String enumName = (String) enumVar.get("name");
+                if (enumName != null) {
+                    enumVar.put("name", prefix + enumName);
+                }
+            }
+        }
+        return allowableValues;
+    }
+
     @Override
     public Map<String, Object> postProcessSupportingFileData(Map<String, Object> objs) {
         generateYAMLSpecFile(objs);
diff --git a/modules/openapi-generator/src/main/resources/go/model.mustache b/modules/openapi-generator/src/main/resources/go/model.mustache
index a65cbcb1120..bb836edc591 100644
--- a/modules/openapi-generator/src/main/resources/go/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go/model.mustache
@@ -55,7 +55,7 @@ const (
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{datatypeWithEnum}}_{{name}} {{classname}}{{nameInCamelCase}} = "{{{value}}}"
+	{{name}} {{classname}}{{nameInCamelCase}} = "{{{value}}}"
 	{{/enumVars}}
 	{{/allowableValues}}
 )
diff --git a/samples/client/petstore/go/go-petstore/model_enum_arrays.go b/samples/client/petstore/go/go-petstore/model_enum_arrays.go
index ab4dce92ebb..641b4cc1644 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_arrays.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_arrays.go
@@ -10,6 +10,22 @@
 package petstore
 
 type EnumArrays struct {
-	JustSymbol string `json:"just_symbol,omitempty"`
-	ArrayEnum []string `json:"array_enum,omitempty"`
+	JustSymbol EnumArraysJustSymbol `json:"just_symbol,omitempty"`
+	ArrayEnum EnumArraysArrayEnum `json:"array_enum,omitempty"`
 }
+
+type EnumArraysJustSymbol string
+
+// List of EnumArraysJustSymbol
+const (
+	JUST_SYMBOL_GREATER_THAN_OR_EQUAL_TO EnumArraysJustSymbol = ">="
+	JUST_SYMBOL_DOLLAR EnumArraysJustSymbol = "$"
+)
+
+type EnumArraysArrayEnum []string
+
+// List of EnumArraysArrayEnum
+const (
+	ARRAY_ENUM_FISH EnumArraysArrayEnum = "fish"
+	ARRAY_ENUM_CRAB EnumArraysArrayEnum = "crab"
+)
diff --git a/samples/client/petstore/go/go-petstore/model_enum_class.go b/samples/client/petstore/go/go-petstore/model_enum_class.go
index 534ce432881..e94b84dfca6 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_class.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_class.go
@@ -12,7 +12,7 @@ type EnumClass string
 
 // List of EnumClass
 const (
-	ABC EnumClass = "_abc"
-	EFG EnumClass = "-efg"
-	XYZ EnumClass = "(xyz)"
+	ENUM_CLASS_ABC EnumClass = "_abc"
+	ENUM_CLASS_EFG EnumClass = "-efg"
+	ENUM_CLASS_XYZ EnumClass = "(xyz)"
 )
\ No newline at end of file
diff --git a/samples/client/petstore/go/go-petstore/model_enum_test_.go b/samples/client/petstore/go/go-petstore/model_enum_test_.go
index f85f31501a0..b02e4c70fa8 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_test_.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_test_.go
@@ -10,9 +10,43 @@
 package petstore
 
 type EnumTest struct {
-	EnumString string `json:"enum_string,omitempty"`
-	EnumStringRequired string `json:"enum_string_required"`
-	EnumInteger int32 `json:"enum_integer,omitempty"`
-	EnumNumber float64 `json:"enum_number,omitempty"`
+	EnumString EnumTestEnumString `json:"enum_string,omitempty"`
+	EnumStringRequired EnumTestEnumStringRequired `json:"enum_string_required"`
+	EnumInteger EnumTestEnumInteger `json:"enum_integer,omitempty"`
+	EnumNumber EnumTestEnumNumber `json:"enum_number,omitempty"`
 	OuterEnum OuterEnum `json:"outerEnum,omitempty"`
 }
+
+type EnumTestEnumString string
+
+// List of EnumTestEnumString
+const (
+	ENUM_STRING_UPPER EnumTestEnumString = "UPPER"
+	ENUM_STRING_LOWER EnumTestEnumString = "lower"
+	ENUM_STRING_EMPTY EnumTestEnumString = ""
+)
+
+type EnumTestEnumStringRequired string
+
+// List of EnumTestEnumStringRequired
+const (
+	ENUM_STRING_REQUIRED_UPPER EnumTestEnumStringRequired = "UPPER"
+	ENUM_STRING_REQUIRED_LOWER EnumTestEnumStringRequired = "lower"
+	ENUM_STRING_REQUIRED_EMPTY EnumTestEnumStringRequired = ""
+)
+
+type EnumTestEnumInteger int32
+
+// List of EnumTestEnumInteger
+const (
+	ENUM_INTEGER__1 EnumTestEnumInteger = "1"
+	ENUM_INTEGER__1 EnumTestEnumInteger = "-1"
+)
+
+type EnumTestEnumNumber float64
+
+// List of EnumTestEnumNumber
+const (
+	ENUM_NUMBER__1_1 EnumTestEnumNumber = "1.1"
+	ENUM_NUMBER__1_2 EnumTestEnumNumber = "-1.2"
+)
diff --git a/samples/client/petstore/go/go-petstore/model_map_test_.go b/samples/client/petstore/go/go-petstore/model_map_test_.go
index 830e760fe31..2241db381f2 100644
--- a/samples/client/petstore/go/go-petstore/model_map_test_.go
+++ b/samples/client/petstore/go/go-petstore/model_map_test_.go
@@ -11,7 +11,15 @@ package petstore
 
 type MapTest struct {
 	MapMapOfString map[string]map[string]string `json:"map_map_of_string,omitempty"`
-	MapOfEnumString map[string]string `json:"map_of_enum_string,omitempty"`
+	MapOfEnumString MapTestMapOfEnumString `json:"map_of_enum_string,omitempty"`
 	DirectMap map[string]bool `json:"direct_map,omitempty"`
 	IndirectMap map[string]bool `json:"indirect_map,omitempty"`
 }
+
+type MapTestMapOfEnumString map[string]string
+
+// List of MapTestMapOfEnumString
+const (
+	MAP_OF_ENUM_STRING_UPPER MapTestMapOfEnumString = "UPPER"
+	MAP_OF_ENUM_STRING_LOWER MapTestMapOfEnumString = "lower"
+)
diff --git a/samples/client/petstore/go/go-petstore/model_order.go b/samples/client/petstore/go/go-petstore/model_order.go
index c81d67ae0fa..b49a4a9b826 100644
--- a/samples/client/petstore/go/go-petstore/model_order.go
+++ b/samples/client/petstore/go/go-petstore/model_order.go
@@ -18,6 +18,16 @@ type Order struct {
 	Quantity int32 `json:"quantity,omitempty"`
 	ShipDate time.Time `json:"shipDate,omitempty"`
 	// Order Status
-	Status string `json:"status,omitempty"`
+	Status OrderStatus `json:"status,omitempty"`
 	Complete bool `json:"complete,omitempty"`
 }
+
+// Status : Order Status
+type OrderStatus string
+
+// List of OrderStatus
+const (
+	STATUS_PLACED OrderStatus = "placed"
+	STATUS_APPROVED OrderStatus = "approved"
+	STATUS_DELIVERED OrderStatus = "delivered"
+)
diff --git a/samples/client/petstore/go/go-petstore/model_outer_enum.go b/samples/client/petstore/go/go-petstore/model_outer_enum.go
index 903d31e8269..3ec2a3131c3 100644
--- a/samples/client/petstore/go/go-petstore/model_outer_enum.go
+++ b/samples/client/petstore/go/go-petstore/model_outer_enum.go
@@ -12,7 +12,7 @@ type OuterEnum string
 
 // List of OuterEnum
 const (
-	PLACED OuterEnum = "placed"
-	APPROVED OuterEnum = "approved"
-	DELIVERED OuterEnum = "delivered"
+	OUTER_ENUM_PLACED OuterEnum = "placed"
+	OUTER_ENUM_APPROVED OuterEnum = "approved"
+	OUTER_ENUM_DELIVERED OuterEnum = "delivered"
 )
\ No newline at end of file
diff --git a/samples/client/petstore/go/go-petstore/model_pet.go b/samples/client/petstore/go/go-petstore/model_pet.go
index 4930dbb92e8..827069390e1 100644
--- a/samples/client/petstore/go/go-petstore/model_pet.go
+++ b/samples/client/petstore/go/go-petstore/model_pet.go
@@ -16,5 +16,15 @@ type Pet struct {
 	PhotoUrls []string `json:"photoUrls"`
 	Tags []Tag `json:"tags,omitempty"`
 	// pet status in the store
-	Status string `json:"status,omitempty"`
+	Status PetStatus `json:"status,omitempty"`
 }
+
+// Status : pet status in the store
+type PetStatus string
+
+// List of PetStatus
+const (
+	STATUS_AVAILABLE PetStatus = "available"
+	STATUS_PENDING PetStatus = "pending"
+	STATUS_SOLD PetStatus = "sold"
+)
-- 
GitLab


From 734e8bf7b5cceaaa37daa9bd68335534c1bda56e Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Sun, 24 Mar 2019 14:03:05 -0700
Subject: [PATCH 4/8] Fix boolean comparison.

---
 .../org/openapitools/codegen/languages/AbstractGoCodegen.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index bd15ee1fac0..c0d7dd0355b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -524,7 +524,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
             // Also prepend var names used for defining inline enums with inline enum's name
             if (Boolean.TRUE.equals(cm.hasEnums)) {
                 for (CodegenProperty param : cm.vars) {
-                    if (param.isEnum && param.allowableValues != null) {
+                    if (Boolean.TRUE.equals(param.isEnum) && param.allowableValues != null) {
                         String prefix = toEnumVarName(param.name, param.dataType) + "_";
                         param.allowableValues = prefixAllowableValues(param.allowableValues, prefix);
                     }
-- 
GitLab


From e3a45702889785cd6d8a3c0230b78917d5cc9f3e Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Sun, 24 Mar 2019 17:17:37 -0700
Subject: [PATCH 5/8] Fix enum value representations for int, double, and
 floats to remove quotes.

---
 .../org/openapitools/codegen/languages/AbstractGoCodegen.java | 2 +-
 .../openapi-generator/src/main/resources/go/model.mustache    | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index c0d7dd0355b..79eb716b67d 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -585,7 +585,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
         if ("int".equals(datatype) || "double".equals(datatype) || "float".equals(datatype)) {
             return value;
         } else {
-            return escapeText(value);
+            return "\"" + escapeText(value) + "\"";
         }
     }
 
diff --git a/modules/openapi-generator/src/main/resources/go/model.mustache b/modules/openapi-generator/src/main/resources/go/model.mustache
index bb836edc591..660eec6943c 100644
--- a/modules/openapi-generator/src/main/resources/go/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go/model.mustache
@@ -23,7 +23,7 @@ const (
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{name}} {{{classname}}} = "{{{value}}}"
+	{{name}} {{{classname}}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 ){{/isEnum}}{{^isEnum}}{{#description}}
@@ -55,7 +55,7 @@ const (
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{name}} {{classname}}{{nameInCamelCase}} = "{{{value}}}"
+	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 )
-- 
GitLab


From a9d9463d9bae20f81804b9a618019840742234f3 Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Mon, 25 Mar 2019 08:11:42 -0700
Subject: [PATCH 6/8] Use quoted enum values for strings only.

---
 .../codegen/languages/AbstractGoCodegen.java  |  6 ++--
 .../resources/go-gin-server/model.mustache    | 29 +++++++++++++++++--
 .../main/resources/go-server/model.mustache   | 29 +++++++++++++++++--
 .../go/go-petstore/model_enum_test_.go        |  8 ++---
 .../petstore/go-api-server/go/model_order.go  | 12 +++++++-
 .../petstore/go-api-server/go/model_pet.go    | 12 +++++++-
 .../go-gin-api-server/go/model_order.go       | 12 +++++++-
 .../go-gin-api-server/go/model_pet.go         | 12 +++++++-
 8 files changed, 103 insertions(+), 17 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 79eb716b67d..7f014503c90 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -582,10 +582,10 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
 
     @Override
     public String toEnumValue(String value, String datatype) {
-        if ("int".equals(datatype) || "double".equals(datatype) || "float".equals(datatype)) {
-            return value;
-        } else {
+        if ("string".equals(datatype)) {
             return "\"" + escapeText(value) + "\"";
+        } else {
+            return value;
         }
     }
 
diff --git a/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache b/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
index 38408680231..b1ba6e1c846 100644
--- a/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
@@ -11,7 +11,7 @@ type {{{name}}} {{^format}}{{dataType}}{{/format}}{{#format}}{{{format}}}{{/form
 const (
 	{{#allowableValues}}
 	{{#enumVars}}
-	{{name}} {{{classname}}} = "{{{value}}}"
+	{{name}} {{{classname}}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 ){{/isEnum}}{{^isEnum}}{{#description}}
@@ -19,6 +19,29 @@ const (
 type {{classname}} struct {
 {{#vars}}{{#description}}
 	// {{{description}}}{{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
-}{{/isEnum}}{{/model}}{{/models}}
+}{{/isEnum}}
+{{! Define any inline enums from above}}
+{{#hasEnums}}
+{{#vars}}
+{{#isEnum}}
+
+{{#description}}
+// {{{name}}} : {{{description}}}
+{{/description}}
+type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+
+// List of {{classname}}{{nameInCamelCase}}
+const (
+	{{#allowableValues}}
+	{{#enumVars}}
+	{{^-first}}
+	{{/-first}}
+	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
+	{{/enumVars}}
+	{{/allowableValues}}
+)
+{{/isEnum}}
+{{/vars}}
+{{/hasEnums}}{{/model}}{{/models}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/go-server/model.mustache b/modules/openapi-generator/src/main/resources/go-server/model.mustache
index 38408680231..b1ba6e1c846 100644
--- a/modules/openapi-generator/src/main/resources/go-server/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go-server/model.mustache
@@ -11,7 +11,7 @@ type {{{name}}} {{^format}}{{dataType}}{{/format}}{{#format}}{{{format}}}{{/form
 const (
 	{{#allowableValues}}
 	{{#enumVars}}
-	{{name}} {{{classname}}} = "{{{value}}}"
+	{{name}} {{{classname}}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 ){{/isEnum}}{{^isEnum}}{{#description}}
@@ -19,6 +19,29 @@ const (
 type {{classname}} struct {
 {{#vars}}{{#description}}
 	// {{{description}}}{{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
-}{{/isEnum}}{{/model}}{{/models}}
+}{{/isEnum}}
+{{! Define any inline enums from above}}
+{{#hasEnums}}
+{{#vars}}
+{{#isEnum}}
+
+{{#description}}
+// {{{name}}} : {{{description}}}
+{{/description}}
+type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+
+// List of {{classname}}{{nameInCamelCase}}
+const (
+	{{#allowableValues}}
+	{{#enumVars}}
+	{{^-first}}
+	{{/-first}}
+	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
+	{{/enumVars}}
+	{{/allowableValues}}
+)
+{{/isEnum}}
+{{/vars}}
+{{/hasEnums}}{{/model}}{{/models}}
\ No newline at end of file
diff --git a/samples/client/petstore/go/go-petstore/model_enum_test_.go b/samples/client/petstore/go/go-petstore/model_enum_test_.go
index b02e4c70fa8..e03644aba7b 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_test_.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_test_.go
@@ -39,14 +39,14 @@ type EnumTestEnumInteger int32
 
 // List of EnumTestEnumInteger
 const (
-	ENUM_INTEGER__1 EnumTestEnumInteger = "1"
-	ENUM_INTEGER__1 EnumTestEnumInteger = "-1"
+	ENUM_INTEGER__1 EnumTestEnumInteger = 1
+	ENUM_INTEGER__1 EnumTestEnumInteger = -1
 )
 
 type EnumTestEnumNumber float64
 
 // List of EnumTestEnumNumber
 const (
-	ENUM_NUMBER__1_1 EnumTestEnumNumber = "1.1"
-	ENUM_NUMBER__1_2 EnumTestEnumNumber = "-1.2"
+	ENUM_NUMBER__1_1 EnumTestEnumNumber = 1.1
+	ENUM_NUMBER__1_2 EnumTestEnumNumber = -1.2
 )
diff --git a/samples/server/petstore/go-api-server/go/model_order.go b/samples/server/petstore/go-api-server/go/model_order.go
index a9d8dbb7957..437a58f53e8 100644
--- a/samples/server/petstore/go-api-server/go/model_order.go
+++ b/samples/server/petstore/go-api-server/go/model_order.go
@@ -25,7 +25,17 @@ type Order struct {
 	ShipDate time.Time `json:"shipDate,omitempty"`
 
 	// Order Status
-	Status string `json:"status,omitempty"`
+	Status OrderStatus `json:"status,omitempty"`
 
 	Complete bool `json:"complete,omitempty"`
 }
+
+// Status : Order Status
+type OrderStatus string
+
+// List of OrderStatus
+const (
+	STATUS_PLACED OrderStatus = "placed"
+	STATUS_APPROVED OrderStatus = "approved"
+	STATUS_DELIVERED OrderStatus = "delivered"
+)
diff --git a/samples/server/petstore/go-api-server/go/model_pet.go b/samples/server/petstore/go-api-server/go/model_pet.go
index fb206487ab0..0d3b9f40381 100644
--- a/samples/server/petstore/go-api-server/go/model_pet.go
+++ b/samples/server/petstore/go-api-server/go/model_pet.go
@@ -23,5 +23,15 @@ type Pet struct {
 	Tags []Tag `json:"tags,omitempty"`
 
 	// pet status in the store
-	Status string `json:"status,omitempty"`
+	Status PetStatus `json:"status,omitempty"`
 }
+
+// Status : pet status in the store
+type PetStatus string
+
+// List of PetStatus
+const (
+	STATUS_AVAILABLE PetStatus = "available"
+	STATUS_PENDING PetStatus = "pending"
+	STATUS_SOLD PetStatus = "sold"
+)
diff --git a/samples/server/petstore/go-gin-api-server/go/model_order.go b/samples/server/petstore/go-gin-api-server/go/model_order.go
index a9d8dbb7957..437a58f53e8 100644
--- a/samples/server/petstore/go-gin-api-server/go/model_order.go
+++ b/samples/server/petstore/go-gin-api-server/go/model_order.go
@@ -25,7 +25,17 @@ type Order struct {
 	ShipDate time.Time `json:"shipDate,omitempty"`
 
 	// Order Status
-	Status string `json:"status,omitempty"`
+	Status OrderStatus `json:"status,omitempty"`
 
 	Complete bool `json:"complete,omitempty"`
 }
+
+// Status : Order Status
+type OrderStatus string
+
+// List of OrderStatus
+const (
+	STATUS_PLACED OrderStatus = "placed"
+	STATUS_APPROVED OrderStatus = "approved"
+	STATUS_DELIVERED OrderStatus = "delivered"
+)
diff --git a/samples/server/petstore/go-gin-api-server/go/model_pet.go b/samples/server/petstore/go-gin-api-server/go/model_pet.go
index fb206487ab0..0d3b9f40381 100644
--- a/samples/server/petstore/go-gin-api-server/go/model_pet.go
+++ b/samples/server/petstore/go-gin-api-server/go/model_pet.go
@@ -23,5 +23,15 @@ type Pet struct {
 	Tags []Tag `json:"tags,omitempty"`
 
 	// pet status in the store
-	Status string `json:"status,omitempty"`
+	Status PetStatus `json:"status,omitempty"`
 }
+
+// Status : pet status in the store
+type PetStatus string
+
+// List of PetStatus
+const (
+	STATUS_AVAILABLE PetStatus = "available"
+	STATUS_PENDING PetStatus = "pending"
+	STATUS_SOLD PetStatus = "sold"
+)
-- 
GitLab


From e6ee4c420a26c6b9fdce6bbc79c18cf8b8905e64 Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Mon, 25 Mar 2019 12:08:24 -0700
Subject: [PATCH 7/8] Fix enum name escaping for numbers.

---
 .../openapitools/codegen/languages/AbstractGoCodegen.java | 8 ++++----
 .../client/petstore/go/go-petstore/model_enum_test_.go    | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 7f014503c90..176ba7f2568 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -518,14 +518,14 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
 
             // For enum var names prepend with this model's name to help prevent namespace collision
             if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) {
-                String prefix = toEnumVarName(cm.name, cm.dataType) + "_";
+                String prefix = toEnumVarName(cm.name, "string") + "_";
                 cm.allowableValues = prefixAllowableValues(cm.allowableValues, prefix);
             }
             // Also prepend var names used for defining inline enums with inline enum's name
             if (Boolean.TRUE.equals(cm.hasEnums)) {
                 for (CodegenProperty param : cm.vars) {
                     if (Boolean.TRUE.equals(param.isEnum) && param.allowableValues != null) {
-                        String prefix = toEnumVarName(param.name, param.dataType) + "_";
+                        String prefix = toEnumVarName(param.name, "string") + "_";
                         param.allowableValues = prefixAllowableValues(param.allowableValues, prefix);
                     }
                 }
@@ -601,7 +601,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
         }
 
         // number
-        if ("int".equals(datatype) || "double".equals(datatype) || "float".equals(datatype)) {
+        if (datatype.startsWith("float") || datatype.startsWith("int") || datatype.startsWith("uint")) {
             String varName = name;
             varName = varName.replaceAll("-", "MINUS_");
             varName = varName.replaceAll("\\+", "PLUS_");
@@ -622,7 +622,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
         if (isReservedWord(enumName)) { // reserved word
             return escapeReservedWord(enumName);
         } else if (enumName.matches("\\d.*")) { // starts with a number
-            return "_" + enumName;
+            return "NUM_" + enumName;
         } else {
             return enumName;
         }
diff --git a/samples/client/petstore/go/go-petstore/model_enum_test_.go b/samples/client/petstore/go/go-petstore/model_enum_test_.go
index e03644aba7b..3787858c444 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_test_.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_test_.go
@@ -39,14 +39,14 @@ type EnumTestEnumInteger int32
 
 // List of EnumTestEnumInteger
 const (
-	ENUM_INTEGER__1 EnumTestEnumInteger = 1
-	ENUM_INTEGER__1 EnumTestEnumInteger = -1
+	ENUM_INTEGER_1 EnumTestEnumInteger = 1
+	ENUM_INTEGER_MINUS_1 EnumTestEnumInteger = -1
 )
 
 type EnumTestEnumNumber float64
 
 // List of EnumTestEnumNumber
 const (
-	ENUM_NUMBER__1_1 EnumTestEnumNumber = 1.1
-	ENUM_NUMBER__1_2 EnumTestEnumNumber = -1.2
+	ENUM_NUMBER_1_DOT_1 EnumTestEnumNumber = 1.1
+	ENUM_NUMBER_MINUS_1_DOT_2 EnumTestEnumNumber = -1.2
 )
-- 
GitLab


From b66dbbf090d6a6292de2b8b2bf712f3064ae1856 Mon Sep 17 00:00:00 2001
From: Tim Pavlik <tpavlik@splunk.com>
Date: Mon, 25 Mar 2019 20:46:38 -0700
Subject: [PATCH 8/8] Fix maps and arrays of enums.

---
 .../codegen/languages/AbstractGoCodegen.java       | 13 ++++++++++++-
 .../main/resources/go-gin-server/model.mustache    | 14 ++++++++------
 .../src/main/resources/go-server/model.mustache    | 14 ++++++++------
 .../src/main/resources/go/model.mustache           | 10 +++++-----
 .../petstore/go/go-petstore/docs/EnumArrays.md     |  4 ++--
 .../petstore/go/go-petstore/docs/EnumTest.md       |  8 ++++----
 .../client/petstore/go/go-petstore/docs/MapTest.md |  2 +-
 .../client/petstore/go/go-petstore/docs/Order.md   |  2 +-
 samples/client/petstore/go/go-petstore/docs/Pet.md |  2 +-
 .../petstore/go/go-petstore/model_enum_arrays.go   |  4 ++--
 .../petstore/go/go-petstore/model_map_test_.go     |  4 ++--
 .../client/petstore/go/go-petstore/model_order.go  |  2 +-
 .../client/petstore/go/go-petstore/model_pet.go    |  2 +-
 .../petstore/go-api-server/go/model_order.go       |  2 +-
 .../server/petstore/go-api-server/go/model_pet.go  |  2 +-
 .../petstore/go-gin-api-server/go/model_order.go   |  2 +-
 .../petstore/go-gin-api-server/go/model_pet.go     |  2 +-
 17 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 176ba7f2568..d57d4ed8ac4 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -510,7 +510,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
     @Override
     public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
         objs = super.postProcessModelsEnum(objs);
-        
+
         List<Object> models = (List<Object>) objs.get("models");
         for (Object _mo : models) {
             Map<String, Object> mo = (Map<String, Object>) _mo;
@@ -527,6 +527,17 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
                     if (Boolean.TRUE.equals(param.isEnum) && param.allowableValues != null) {
                         String prefix = toEnumVarName(param.name, "string") + "_";
                         param.allowableValues = prefixAllowableValues(param.allowableValues, prefix);
+                        // Form datatype for this field: use ClassNameFieldName syntax 
+                        param.dataType = cm.classname + param.nameInCamelCase;
+                        if (Boolean.TRUE.equals(param.isListContainer)) {
+                            // Special case: slice of enums, use []ClassNameFieldName
+                            param.datatypeWithEnum = "[]" + param.dataType;
+                        } else if (Boolean.TRUE.equals(param.isMapContainer)) {
+                            // Special case: map of enums, use map[string]ClassNameFieldName
+                            param.datatypeWithEnum = "map[string]" + param.dataType;
+                        } else {
+                            param.datatypeWithEnum = param.dataType;
+                        }
                     }
                 }
             }
diff --git a/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache b/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
index b1ba6e1c846..eb9dccb63c6 100644
--- a/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go-gin-server/model.mustache
@@ -19,7 +19,7 @@ const (
 type {{classname}} struct {
 {{#vars}}{{#description}}
 	// {{{description}}}{{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{datatypeWithEnum}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
 }{{/isEnum}}
 {{! Define any inline enums from above}}
@@ -28,20 +28,22 @@ type {{classname}} struct {
 {{#isEnum}}
 
 {{#description}}
-// {{{name}}} : {{{description}}}
+// {{datatype}} : {{{description}}}
 {{/description}}
-type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+type {{datatype}} {{#items}}{{baseType}}{{/items}}{{^items}}{{baseType}}{{/items}}
 
-// List of {{classname}}{{nameInCamelCase}}
+// List of {{datatype}}
 const (
 	{{#allowableValues}}
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
+	{{name}} {{datatype}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 )
 {{/isEnum}}
 {{/vars}}
-{{/hasEnums}}{{/model}}{{/models}}
\ No newline at end of file
+{{/hasEnums}}
+{{/model}}
+{{/models}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/go-server/model.mustache b/modules/openapi-generator/src/main/resources/go-server/model.mustache
index b1ba6e1c846..eb9dccb63c6 100644
--- a/modules/openapi-generator/src/main/resources/go-server/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go-server/model.mustache
@@ -19,7 +19,7 @@ const (
 type {{classname}} struct {
 {{#vars}}{{#description}}
 	// {{{description}}}{{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{datatypeWithEnum}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
 }{{/isEnum}}
 {{! Define any inline enums from above}}
@@ -28,20 +28,22 @@ type {{classname}} struct {
 {{#isEnum}}
 
 {{#description}}
-// {{{name}}} : {{{description}}}
+// {{datatype}} : {{{description}}}
 {{/description}}
-type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+type {{datatype}} {{#items}}{{baseType}}{{/items}}{{^items}}{{baseType}}{{/items}}
 
-// List of {{classname}}{{nameInCamelCase}}
+// List of {{datatype}}
 const (
 	{{#allowableValues}}
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
+	{{name}} {{datatype}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 )
 {{/isEnum}}
 {{/vars}}
-{{/hasEnums}}{{/model}}{{/models}}
\ No newline at end of file
+{{/hasEnums}}
+{{/model}}
+{{/models}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/go/model.mustache b/modules/openapi-generator/src/main/resources/go/model.mustache
index 660eec6943c..e6714b17c40 100644
--- a/modules/openapi-generator/src/main/resources/go/model.mustache
+++ b/modules/openapi-generator/src/main/resources/go/model.mustache
@@ -35,7 +35,7 @@ type {{classname}} struct {
 {{#description}}
 	// {{{description}}}
 {{/description}}
-	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{classname}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
+	{{name}} {{#isNullable}}*{{/isNullable}}{{#isEnum}}{{datatypeWithEnum}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
 {{/vars}}
 }
 {{/isEnum}}
@@ -45,17 +45,17 @@ type {{classname}} struct {
 {{#isEnum}}
 
 {{#description}}
-// {{{name}}} : {{{description}}}
+// {{datatype}} : {{{description}}}
 {{/description}}
-type {{classname}}{{nameInCamelCase}} {{^format}}{{datatype}}{{/format}}{{#format}}{{{format}}}{{/format}}
+type {{datatype}} {{#items}}{{baseType}}{{/items}}{{^items}}{{baseType}}{{/items}}
 
-// List of {{classname}}{{nameInCamelCase}}
+// List of {{datatype}}
 const (
 	{{#allowableValues}}
 	{{#enumVars}}
 	{{^-first}}
 	{{/-first}}
-	{{name}} {{classname}}{{nameInCamelCase}} = {{{value}}}
+	{{name}} {{datatype}} = {{{value}}}
 	{{/enumVars}}
 	{{/allowableValues}}
 )
diff --git a/samples/client/petstore/go/go-petstore/docs/EnumArrays.md b/samples/client/petstore/go/go-petstore/docs/EnumArrays.md
index 9eca8b29032..6145b34e6ae 100644
--- a/samples/client/petstore/go/go-petstore/docs/EnumArrays.md
+++ b/samples/client/petstore/go/go-petstore/docs/EnumArrays.md
@@ -3,8 +3,8 @@
 ## Properties
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
-**JustSymbol** | **string** |  | [optional] 
-**ArrayEnum** | **[]string** |  | [optional] 
+**JustSymbol** | **EnumArraysJustSymbol** |  | [optional] 
+**ArrayEnum** | **EnumArraysArrayEnum** |  | [optional] 
 
 [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 
diff --git a/samples/client/petstore/go/go-petstore/docs/EnumTest.md b/samples/client/petstore/go/go-petstore/docs/EnumTest.md
index 85eab0e1d40..fc8e5dbb81f 100644
--- a/samples/client/petstore/go/go-petstore/docs/EnumTest.md
+++ b/samples/client/petstore/go/go-petstore/docs/EnumTest.md
@@ -3,10 +3,10 @@
 ## Properties
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
-**EnumString** | **string** |  | [optional] 
-**EnumStringRequired** | **string** |  | 
-**EnumInteger** | **int32** |  | [optional] 
-**EnumNumber** | **float64** |  | [optional] 
+**EnumString** | **EnumTestEnumString** |  | [optional] 
+**EnumStringRequired** | **EnumTestEnumStringRequired** |  | 
+**EnumInteger** | **EnumTestEnumInteger** |  | [optional] 
+**EnumNumber** | **EnumTestEnumNumber** |  | [optional] 
 **OuterEnum** | [**OuterEnum**](OuterEnum.md) |  | [optional] 
 
 [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/samples/client/petstore/go/go-petstore/docs/MapTest.md b/samples/client/petstore/go/go-petstore/docs/MapTest.md
index 49381ec4b85..d7f04b0c823 100644
--- a/samples/client/petstore/go/go-petstore/docs/MapTest.md
+++ b/samples/client/petstore/go/go-petstore/docs/MapTest.md
@@ -4,7 +4,7 @@
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
 **MapMapOfString** | [**map[string]map[string]string**](map.md) |  | [optional] 
-**MapOfEnumString** | **map[string]string** |  | [optional] 
+**MapOfEnumString** | **MapTestMapOfEnumString** |  | [optional] 
 **DirectMap** | **map[string]bool** |  | [optional] 
 **IndirectMap** | **map[string]bool** |  | [optional] 
 
diff --git a/samples/client/petstore/go/go-petstore/docs/Order.md b/samples/client/petstore/go/go-petstore/docs/Order.md
index befa9151a18..c872ed50484 100644
--- a/samples/client/petstore/go/go-petstore/docs/Order.md
+++ b/samples/client/petstore/go/go-petstore/docs/Order.md
@@ -7,7 +7,7 @@ Name | Type | Description | Notes
 **PetId** | **int64** |  | [optional] 
 **Quantity** | **int32** |  | [optional] 
 **ShipDate** | [**time.Time**](time.Time.md) |  | [optional] 
-**Status** | **string** | Order Status | [optional] 
+**Status** | **OrderStatus** | Order Status | [optional] 
 **Complete** | **bool** |  | [optional] [default to false]
 
 [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/samples/client/petstore/go/go-petstore/docs/Pet.md b/samples/client/petstore/go/go-petstore/docs/Pet.md
index 049c82eb5a0..16bb4d6e9c5 100644
--- a/samples/client/petstore/go/go-petstore/docs/Pet.md
+++ b/samples/client/petstore/go/go-petstore/docs/Pet.md
@@ -8,7 +8,7 @@ Name | Type | Description | Notes
 **Name** | **string** |  | 
 **PhotoUrls** | **[]string** |  | 
 **Tags** | [**[]Tag**](Tag.md) |  | [optional] 
-**Status** | **string** | pet status in the store | [optional] 
+**Status** | **PetStatus** | pet status in the store | [optional] 
 
 [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 
diff --git a/samples/client/petstore/go/go-petstore/model_enum_arrays.go b/samples/client/petstore/go/go-petstore/model_enum_arrays.go
index 641b4cc1644..833d10b68d4 100644
--- a/samples/client/petstore/go/go-petstore/model_enum_arrays.go
+++ b/samples/client/petstore/go/go-petstore/model_enum_arrays.go
@@ -11,7 +11,7 @@ package petstore
 
 type EnumArrays struct {
 	JustSymbol EnumArraysJustSymbol `json:"just_symbol,omitempty"`
-	ArrayEnum EnumArraysArrayEnum `json:"array_enum,omitempty"`
+	ArrayEnum []EnumArraysArrayEnum `json:"array_enum,omitempty"`
 }
 
 type EnumArraysJustSymbol string
@@ -22,7 +22,7 @@ const (
 	JUST_SYMBOL_DOLLAR EnumArraysJustSymbol = "$"
 )
 
-type EnumArraysArrayEnum []string
+type EnumArraysArrayEnum string
 
 // List of EnumArraysArrayEnum
 const (
diff --git a/samples/client/petstore/go/go-petstore/model_map_test_.go b/samples/client/petstore/go/go-petstore/model_map_test_.go
index 2241db381f2..8de771c11b1 100644
--- a/samples/client/petstore/go/go-petstore/model_map_test_.go
+++ b/samples/client/petstore/go/go-petstore/model_map_test_.go
@@ -11,12 +11,12 @@ package petstore
 
 type MapTest struct {
 	MapMapOfString map[string]map[string]string `json:"map_map_of_string,omitempty"`
-	MapOfEnumString MapTestMapOfEnumString `json:"map_of_enum_string,omitempty"`
+	MapOfEnumString map[string]MapTestMapOfEnumString `json:"map_of_enum_string,omitempty"`
 	DirectMap map[string]bool `json:"direct_map,omitempty"`
 	IndirectMap map[string]bool `json:"indirect_map,omitempty"`
 }
 
-type MapTestMapOfEnumString map[string]string
+type MapTestMapOfEnumString string
 
 // List of MapTestMapOfEnumString
 const (
diff --git a/samples/client/petstore/go/go-petstore/model_order.go b/samples/client/petstore/go/go-petstore/model_order.go
index b49a4a9b826..c343cf3b47e 100644
--- a/samples/client/petstore/go/go-petstore/model_order.go
+++ b/samples/client/petstore/go/go-petstore/model_order.go
@@ -22,7 +22,7 @@ type Order struct {
 	Complete bool `json:"complete,omitempty"`
 }
 
-// Status : Order Status
+// OrderStatus : Order Status
 type OrderStatus string
 
 // List of OrderStatus
diff --git a/samples/client/petstore/go/go-petstore/model_pet.go b/samples/client/petstore/go/go-petstore/model_pet.go
index 827069390e1..16646391fc9 100644
--- a/samples/client/petstore/go/go-petstore/model_pet.go
+++ b/samples/client/petstore/go/go-petstore/model_pet.go
@@ -19,7 +19,7 @@ type Pet struct {
 	Status PetStatus `json:"status,omitempty"`
 }
 
-// Status : pet status in the store
+// PetStatus : pet status in the store
 type PetStatus string
 
 // List of PetStatus
diff --git a/samples/server/petstore/go-api-server/go/model_order.go b/samples/server/petstore/go-api-server/go/model_order.go
index 437a58f53e8..ca056a34aae 100644
--- a/samples/server/petstore/go-api-server/go/model_order.go
+++ b/samples/server/petstore/go-api-server/go/model_order.go
@@ -30,7 +30,7 @@ type Order struct {
 	Complete bool `json:"complete,omitempty"`
 }
 
-// Status : Order Status
+// OrderStatus : Order Status
 type OrderStatus string
 
 // List of OrderStatus
diff --git a/samples/server/petstore/go-api-server/go/model_pet.go b/samples/server/petstore/go-api-server/go/model_pet.go
index 0d3b9f40381..c2e6f6ac886 100644
--- a/samples/server/petstore/go-api-server/go/model_pet.go
+++ b/samples/server/petstore/go-api-server/go/model_pet.go
@@ -26,7 +26,7 @@ type Pet struct {
 	Status PetStatus `json:"status,omitempty"`
 }
 
-// Status : pet status in the store
+// PetStatus : pet status in the store
 type PetStatus string
 
 // List of PetStatus
diff --git a/samples/server/petstore/go-gin-api-server/go/model_order.go b/samples/server/petstore/go-gin-api-server/go/model_order.go
index 437a58f53e8..ca056a34aae 100644
--- a/samples/server/petstore/go-gin-api-server/go/model_order.go
+++ b/samples/server/petstore/go-gin-api-server/go/model_order.go
@@ -30,7 +30,7 @@ type Order struct {
 	Complete bool `json:"complete,omitempty"`
 }
 
-// Status : Order Status
+// OrderStatus : Order Status
 type OrderStatus string
 
 // List of OrderStatus
diff --git a/samples/server/petstore/go-gin-api-server/go/model_pet.go b/samples/server/petstore/go-gin-api-server/go/model_pet.go
index 0d3b9f40381..c2e6f6ac886 100644
--- a/samples/server/petstore/go-gin-api-server/go/model_pet.go
+++ b/samples/server/petstore/go-gin-api-server/go/model_pet.go
@@ -26,7 +26,7 @@ type Pet struct {
 	Status PetStatus `json:"status,omitempty"`
 }
 
-// Status : pet status in the store
+// PetStatus : pet status in the store
 type PetStatus string
 
 // List of PetStatus
-- 
GitLab