forked from loafle/openapi-generator-original
[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:
parent
c7bd3aa294
commit
c13067d100
@ -7,6 +7,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
|||||||
|
|
||||||
| Option | Description | Values | Default |
|
| Option | Description | Values | Default |
|
||||||
| ------ | ----------- | ------ | ------- |
|
| ------ | ----------- | ------ | ------- |
|
||||||
|
|startEnumsWithUnknown|Introduces "UNKNOWN" as the first element of enumerations.| |false|
|
||||||
|
|
||||||
## IMPORT MAPPING
|
## IMPORT MAPPING
|
||||||
|
|
||||||
|
@ -47,10 +47,14 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
|
|
||||||
private static final String IMPORTS = "imports";
|
private static final String IMPORTS = "imports";
|
||||||
|
|
||||||
|
public static final String START_ENUMS_WITH_UNKNOWN = "startEnumsWithUnknown";
|
||||||
|
|
||||||
private final Logger LOGGER = LoggerFactory.getLogger(ProtobufSchemaCodegen.class);
|
private final Logger LOGGER = LoggerFactory.getLogger(ProtobufSchemaCodegen.class);
|
||||||
|
|
||||||
protected String packageName = "openapitools";
|
protected String packageName = "openapitools";
|
||||||
|
|
||||||
|
private boolean startEnumsWithUnknown = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CodegenType getTag() {
|
public CodegenType getTag() {
|
||||||
return CodegenType.SCHEMA;
|
return CodegenType.SCHEMA;
|
||||||
@ -145,6 +149,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
|
|
||||||
cliOptions.clear();
|
cliOptions.clear();
|
||||||
|
|
||||||
|
addSwitch(START_ENUMS_WITH_UNKNOWN, "Introduces \"UNKNOWN\" as the first element of enumerations.", startEnumsWithUnknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -164,6 +169,10 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
|
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"));
|
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +192,27 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
return camelize(sanitizeName(operationId));
|
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;
|
int enumIndex = 0;
|
||||||
for (Map<String, Object> enumVar : enumVars) {
|
for (Map<String, Object> enumVar : enumVars) {
|
||||||
enumVar.put("protobuf-enum-index", enumIndex);
|
enumVar.put("protobuf-enum-index", enumIndex);
|
||||||
@ -202,6 +231,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
|
|
||||||
if(cm.isEnum) {
|
if(cm.isEnum) {
|
||||||
Map<String, Object> allowableValues = cm.getAllowableValues();
|
Map<String, Object> allowableValues = cm.getAllowableValues();
|
||||||
|
addUnknownToAllowableValues(allowableValues, cm.getClassname());
|
||||||
|
|
||||||
if (allowableValues.containsKey("enumVars")) {
|
if (allowableValues.containsKey("enumVars")) {
|
||||||
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
|
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
|
||||||
addEnumIndexes(enumVars);
|
addEnumIndexes(enumVars);
|
||||||
@ -224,9 +255,13 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var.isEnum && var.allowableValues.containsKey("enumVars")) {
|
if (var.isEnum) {
|
||||||
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)var.allowableValues.get("enumVars");
|
addUnknownToAllowableValues(var.allowableValues, var.getEnumName());
|
||||||
addEnumIndexes(enumVars);
|
|
||||||
|
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
|
// Add x-protobuf-index, unless already specified
|
||||||
|
Loading…
x
Reference in New Issue
Block a user