From fdea71b26eb0bfcc4ff7e48b15463e63c5a1a6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20=C4=8Cerm=C3=A1k?= <64807060+Yurzel@users.noreply.github.com> Date: Mon, 22 Nov 2021 09:29:09 +0100 Subject: [PATCH] [Protobuf-Schema] Add enum as model support (#10868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Protobuf-Schema] Add enum as model support * [Protobuf-Schema] Bugfix: Reverted classname modification * [Protobuf-Scheme] Mustache newlines update * [Protobuf-Schema] Renamed addModelEnumIndexes to addEnumIndexes * [Protobuf-Schema] Add enum as model support * [Protobuf-Schema] Bugfix: Reverted classname modification * [Protobuf-Scheme] Mustache newlines update * [Protobuf-Schema] Renamed addModelEnumIndexes to addEnumIndexes Co-authored-by: Tomáš Čermák --- .../languages/ProtobufSchemaCodegen.java | 24 ++++++++++++++----- .../resources/protobuf-schema/enum.mustache | 7 ++++++ .../resources/protobuf-schema/model.mustache | 3 ++- 3 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/protobuf-schema/enum.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java index f04a58fcf42..58ec9c56b67 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java @@ -183,6 +183,14 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf return camelize(sanitizeName(operationId)); } + public void addEnumIndexes(List> enumVars){ + int enumIndex = 0; + for (Map enumVar : enumVars) { + enumVar.put("protobuf-enum-index", enumIndex); + enumIndex++; + } + } + @Override public Map postProcessModels(Map objs) { objs = postProcessModelsEnum(objs); @@ -192,6 +200,14 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf Map mo = (Map) _mo; CodegenModel cm = (CodegenModel) mo.get("model"); + if(cm.isEnum) { + Map allowableValues = cm.getAllowableValues(); + if (allowableValues.containsKey("enumVars")) { + List> enumVars = (List>)allowableValues.get("enumVars"); + addEnumIndexes(enumVars); + } + } + for (CodegenProperty var : cm.vars) { // add x-protobuf-type: repeated if it's an array if (Boolean.TRUE.equals(var.isArray)) { @@ -209,12 +225,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf } if (var.isEnum && var.allowableValues.containsKey("enumVars")) { - List> enumVars = (List>) var.allowableValues.get("enumVars"); - int enumIndex = 0; - for (Map enumVar : enumVars) { - enumVar.put("protobuf-enum-index", enumIndex); - enumIndex++; - } + List> enumVars = (List>)var.allowableValues.get("enumVars"); + addEnumIndexes(enumVars); } // Add x-protobuf-index, unless already specified diff --git a/modules/openapi-generator/src/main/resources/protobuf-schema/enum.mustache b/modules/openapi-generator/src/main/resources/protobuf-schema/enum.mustache new file mode 100644 index 00000000000..aa26522c880 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/protobuf-schema/enum.mustache @@ -0,0 +1,7 @@ +enum {{classname}} { + {{#allowableValues}} + {{#enumVars}} + {{{name}}} = {{{protobuf-enum-index}}}; + {{/enumVars}} + {{/allowableValues}} +} diff --git a/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache b/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache index f16f097771d..2a609db9a8d 100644 --- a/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache +++ b/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache @@ -11,7 +11,7 @@ import public "{{{modelPackage}}}/{{{import}}}.proto"; {{#models}} {{#model}} -message {{classname}} { +{{#isEnum}}{{>enum}}{{/isEnum}}{{^isEnum}}message {{classname}} { {{#vars}} {{#description}} @@ -34,5 +34,6 @@ message {{classname}} { {{/vars}} } +{{/isEnum}} {{/model}} {{/models}}