mirror of
				https://github.com/OpenAPITools/openapi-generator.git
				synced 2025-10-31 00:33:49 +00:00 
			
		
		
		
	[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 | | ||||
| | ------ | ----------- | ------ | ------- | | ||||
| |startEnumsWithUnknown|Introduces "UNKNOWN" as the first element of enumerations.| |false| | ||||
| 
 | ||||
| ## IMPORT MAPPING | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user