Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Protobuf-Schema] Add enum prefix #11548

Merged
merged 3 commits into from
Feb 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -209,26 +209,62 @@ public String toOperationId(String operationId) {
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){
wing328 marked this conversation as resolved.
Show resolved Hide resolved
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) {
Expand All @@ -248,8 +284,8 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {

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);
Expand Down Expand Up @@ -277,7 +313,8 @@ else if (Boolean.TRUE.equals(var.isNullable && var.isPrimitiveType)) {
}

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");
Expand Down
6 changes: 3 additions & 3 deletions samples/config/petstore/protobuf-schema/models/order.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions samples/config/petstore/protobuf-schema/models/pet.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down