[Protobuf-Schema] Add unknown to enum switch (#10892)

* [Protobuf-Schema] Add unknown to enum switch

* [Protobuf-Schema] Bugfix: unique unknown by prefix

* [Protobuf-Schema] Add unknown to enum switch

* [Protobuf-Schema] Bugfix: unique unknown by prefix

* [Protobuf-Schema] Bugfix after merge, format file

* [Docs][Protobuf-Schema] Generated docs

Co-authored-by: Tomáš Čermák <cermak@merica.cz>
This commit is contained in:
Tomáš Čermák 2021-11-22 14:57:33 +01:00 committed by GitHub
parent c7bd3aa294
commit c13067d100
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 4 deletions

View File

@ -7,6 +7,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
| Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- |
|startEnumsWithUnknown|Introduces &quot;UNKNOWN&quot; as the first element of enumerations.| |false|
## IMPORT MAPPING

View File

@ -47,10 +47,14 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
private static final String IMPORTS = "imports";
public static final String START_ENUMS_WITH_UNKNOWN = "startEnumsWithUnknown";
private final Logger LOGGER = LoggerFactory.getLogger(ProtobufSchemaCodegen.class);
protected String packageName = "openapitools";
private boolean startEnumsWithUnknown = false;
@Override
public CodegenType getTag() {
return CodegenType.SCHEMA;
@ -145,6 +149,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
cliOptions.clear();
addSwitch(START_ENUMS_WITH_UNKNOWN, "Introduces \"UNKNOWN\" as the first element of enumerations.", startEnumsWithUnknown);
}
@Override
@ -164,6 +169,10 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
}
if (additionalProperties.containsKey(this.START_ENUMS_WITH_UNKNOWN)) {
this.startEnumsWithUnknown = convertPropertyToBooleanAndWriteBack(START_ENUMS_WITH_UNKNOWN);
}
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
}
@ -183,7 +192,27 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
return camelize(sanitizeName(operationId));
}
public void addEnumIndexes(List<Map<String, Object>> enumVars){
public void addUnknownToAllowableValues(Map<String, Object> allowableValues, String name) {
if(startEnumsWithUnknown) {
if(allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
HashMap<String, Object> unknown = new HashMap<String, Object>();
unknown.put("name", name + "_UNKNOWN");
unknown.put("isString", "false");
unknown.put("value", "\"" + name + "_UNKNOWN\"");
enumVars.add(0, unknown);
}
if(allowableValues.containsKey("values")) {
List<String> values = (List<String>)allowableValues.get("values");
values.add(0, name + "_UNKNOWN");
}
}
}
public void addEnumIndexes(List<Map<String, Object>> enumVars) {
int enumIndex = 0;
for (Map<String, Object> enumVar : enumVars) {
enumVar.put("protobuf-enum-index", enumIndex);
@ -202,6 +231,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
if(cm.isEnum) {
Map<String, Object> allowableValues = cm.getAllowableValues();
addUnknownToAllowableValues(allowableValues, cm.getClassname());
if (allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
addEnumIndexes(enumVars);
@ -224,9 +255,13 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
}
}
if (var.isEnum && var.allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)var.allowableValues.get("enumVars");
addEnumIndexes(enumVars);
if (var.isEnum) {
addUnknownToAllowableValues(var.allowableValues, var.getEnumName());
if(var.allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) var.allowableValues.get("enumVars");
addEnumIndexes(enumVars);
}
}
// Add x-protobuf-index, unless already specified