[Protobuf-Schema] Add enum prefix (#11548)

* [Protobuf-Schema] Add enum prefix

* [Protobuf-Schema] Documentation updated

* [Protobuf-Schema] Samples updated
This commit is contained in:
Tomáš Čermák 2022-02-17 17:32:34 +01:00 committed by GitHub
parent 6d9e349721
commit f1ad3a89e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 14 deletions

View File

@ -209,26 +209,62 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
return camelize(sanitizeName(operationId));
}
public void addUnknownToAllowableValues(Map<String, Object> allowableValues, String name) {
/**
* Adds prefix to the enum allowable values
* NOTE: Enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it. Therefore, enum value must be unique
*
* @param allowableValues allowable values
* @param prefix added prefix
*/
public void addEnumValuesPrefix(Map<String, Object> allowableValues, String prefix){
if(allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
for(Map<String, Object> value : enumVars) {
String name = (String)value.get("name");
value.put("name", prefix + "_" + name);
value.put("value", "\"" + prefix + "_" + name + "\"");
}
}
if(allowableValues.containsKey("values")) {
List<String> values = (List<String>)allowableValues.get("values");
for(String value : values) {
value = prefix + "_" + value;
}
}
}
/**
* Adds unknown value to the enum allowable values
*
* @param allowableValues allowable values
*/
public void addUnknownToAllowableValues(Map<String, Object> allowableValues) {
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("name", "UNKNOWN");
unknown.put("isString", "false");
unknown.put("value", "\"" + name + "_UNKNOWN\"");
unknown.put("value", "\"UNKNOWN\"");
enumVars.add(0, unknown);
}
if(allowableValues.containsKey("values")) {
List<String> values = (List<String>)allowableValues.get("values");
values.add(0, name + "_UNKNOWN");
values.add(0, "UNKNOWN");
}
}
}
/**
* Iterates enum vars and puts index to them
*
* @param enumVars list of enum vars
*/
public void addEnumIndexes(List<Map<String, Object>> enumVars) {
int enumIndex = 0;
for (Map<String, Object> enumVar : enumVars) {
@ -248,8 +284,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
if(cm.isEnum) {
Map<String, Object> allowableValues = cm.getAllowableValues();
addUnknownToAllowableValues(allowableValues, cm.getClassname());
addUnknownToAllowableValues(allowableValues);
addEnumValuesPrefix(allowableValues, cm.getClassname());
if (allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
addEnumIndexes(enumVars);
@ -277,7 +313,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
}
if (var.isEnum) {
addUnknownToAllowableValues(var.allowableValues, var.getEnumName());
addUnknownToAllowableValues(var.allowableValues);
addEnumValuesPrefix(var.allowableValues, var.getEnumName());
if(var.allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) var.allowableValues.get("enumVars");

View File

@ -25,9 +25,9 @@ message Order {
// Order Status
enum StatusEnum {
PLACED = 0;
APPROVED = 1;
DELIVERED = 2;
StatusEnum_PLACED = 0;
StatusEnum_APPROVED = 1;
StatusEnum_DELIVERED = 2;
}
StatusEnum status = 355610639;

View File

@ -29,9 +29,9 @@ message Pet {
// pet status in the store
enum StatusEnum {
AVAILABLE = 0;
PENDING = 1;
SOLD = 2;
StatusEnum_AVAILABLE = 0;
StatusEnum_PENDING = 1;
StatusEnum_SOLD = 2;
}
StatusEnum status = 355610639;