mirror of
				https://github.com/OpenAPITools/openapi-generator.git
				synced 2025-11-04 10:43:44 +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 |
 | 
					| 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