Skip to content

Commit e88afb1

Browse files
committed
change the supportMultiple response to true
1 parent a2ccb06 commit e88afb1

14 files changed

Lines changed: 188 additions & 173 deletions

File tree

bin/configs/protobuf-schema-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ additionalProperties:
88
numberedFieldNumberList: true
99
startEnumsWithUnspecified: true
1010
wrapComplexType: false
11-
supportMultipleResponses: true
11+
supportMultipleResponses: false
1212
aggregateModelsName: data
1313
typeMappings:
1414
object: "google.protobuf.Struct"

docs/generators/protobuf-schema.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2222
|aggregateModelsName|Aggregated model filename. If set, all generated models will be combined into this single file.| |null|
2323
|numberedFieldNumberList|Field numbers in order.| |false|
2424
|startEnumsWithUnspecified|Introduces "UNSPECIFIED" as the first element of enumerations.| |false|
25-
|supportMultipleResponses|Support multiple responses| |false|
25+
|supportMultipleResponses|Support multiple responses| |true|
2626
|wrapComplexType|Generate Additional message for complex type| |true|
2727

2828
## IMPORT MAPPING

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.openapitools.codegen.languages;
1818

1919
import io.swagger.v3.oas.models.OpenAPI;
20-
import io.swagger.v3.oas.models.PathItem;
2120
import io.swagger.v3.oas.models.media.ArraySchema;
2221
import io.swagger.v3.oas.models.media.MapSchema;
2322
import io.swagger.v3.oas.models.media.ObjectSchema;
@@ -85,7 +84,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
8584

8685
private boolean wrapComplexType = true;
8786

88-
private boolean supportMultipleResponses = false;
87+
private boolean supportMultipleResponses = true;
8988

9089
@Override
9190
public CodegenType getTag() {
@@ -245,8 +244,10 @@ public void processOpts() {
245244
this.setAggregateModelsName((String) additionalProperties.get(AGGREGATE_MODELS_NAME));
246245
}
247246

248-
if(additionalProperties.containsKey(this.SUPPORT_MULTIPLE_RESPONSES)) {
247+
if (additionalProperties.containsKey(this.SUPPORT_MULTIPLE_RESPONSES)) {
249248
this.supportMultipleResponses = convertPropertyToBooleanAndWriteBack(SUPPORT_MULTIPLE_RESPONSES);
249+
} else {
250+
additionalProperties.put(this.SUPPORT_MULTIPLE_RESPONSES, this.supportMultipleResponses);
250251
}
251252

252253
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
@@ -530,7 +531,9 @@ public void addUnspecifiedToAllowableValues(Map<String, Object> allowableValues)
530531

531532
if (allowableValues.containsKey("values")) {
532533
List<String> values = (List<String>) allowableValues.get("values");
533-
values.add(0, "UNSPECIFIED");
534+
List<String> modifiableValues = new ArrayList<>(values);
535+
modifiableValues.add(0, "UNSPECIFIED");
536+
allowableValues.put("values", modifiableValues);
534537
}
535538
}
536539
}
@@ -964,11 +967,11 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
964967
if (r.returnProperty == null) {
965968
r.vendorExtensions.put("x-oneOf-response-type", "google.protobuf.Empty");
966969
r.vendorExtensions.put("x-oneOf-response-name", "empty");
967-
} else if (r.isMap) {
970+
} else if (r.isMap && r.additionalProperties != null) {
968971
r.vendorExtensions.put("x-oneOf-response-type", r.returnProperty.additionalProperties.dataType);
969972
r.vendorExtensions.put("x-oneOf-response-name", resolveVarName(r.returnProperty.additionalProperties));
970973
LOGGER.warn("Mapping responses for operations with supportMultipleResponses flag (operation ID: {}) is not currently supported.", op.operationId);
971-
} else if (r.isArray) {
974+
} else if (r.isArray && r.items != null) {
972975
r.vendorExtensions.put("x-oneOf-response-type", r.returnProperty.items.dataType);
973976
r.vendorExtensions.put("x-oneOf-response-name", resolveVarName(r.returnProperty.items));
974977
LOGGER.warn("Array responses for operations with supportMultipleResponses flag (operation ID: {}) is not currently supported.", op.operationId);
@@ -983,9 +986,14 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
983986
}
984987

985988
if (this.aggregateModelsName != null) {
989+
List<Map<String, String>> imports = objs.getImports().stream()
990+
.filter(importMap -> !importMap.get("import").startsWith("models/"))
991+
.collect(Collectors.toList());
992+
986993
List<Map<String, String>> aggregate_imports = Collections.singletonList(Collections
987994
.singletonMap(IMPORT, toModelImport(this.aggregateModelsName)));
988-
objs.setImports(aggregate_imports);
995+
imports.addAll(aggregate_imports);
996+
objs.setImports(imports);
989997
}
990998
return objs;
991999
}

samples/config/petstore/protobuf-schema-config-complex/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.openapi-generator-ignore
12
README.md
23
models/cat.proto
34
models/category.proto

samples/config/petstore/protobuf-schema-config-complex/services/default_service.proto

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import "google/protobuf/empty.proto";
1616
import public "models/cat.proto";
1717

1818
service DefaultService {
19-
rpc PetsGet (PetsGetRequest) returns (google.protobuf.Empty);
19+
rpc PetsGet (PetsGetRequest) returns (PetsGetResponse);
2020

2121
}
2222

@@ -25,3 +25,8 @@ message PetsGetRequest {
2525

2626
}
2727

28+
message PetsGetResponse {
29+
oneof response {
30+
google.protobuf.Empty empty_200 = 1;
31+
}
32+
}

samples/config/petstore/protobuf-schema-config/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.openapi-generator-ignore
12
README.md
23
models/data.proto
34
services/default_service.proto

samples/config/petstore/protobuf-schema-config/services/default_service.proto

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import "google/protobuf/empty.proto";
1616
import public "models/data.proto";
1717

1818
service DefaultService {
19-
rpc PetsGet (PetsGetRequest) returns (PetsGetResponse);
19+
rpc PetsGet (PetsGetRequest) returns (google.protobuf.Empty);
2020

21-
rpc PetsPost (PetsPostRequest) returns (PetsPostResponse);
21+
rpc PetsPost (PetsPostRequest) returns (google.protobuf.Empty);
2222

2323
}
2424

@@ -27,18 +27,8 @@ message PetsGetRequest {
2727

2828
}
2929

30-
message PetsGetResponse {
31-
oneof response {
32-
google.protobuf.Empty empty_200 = 1;
33-
}
34-
}
3530
message PetsPostRequest {
3631
PetsPostRequest pets_post_request = 1;
3732

3833
}
3934

40-
message PetsPostResponse {
41-
oneof response {
42-
google.protobuf.Empty empty_200 = 1;
43-
}
44-
}

samples/config/petstore/protobuf-schema-config/services/pet_service.proto

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ import "google/protobuf/empty.proto";
1616
import public "models/data.proto";
1717

1818
service PetService {
19-
rpc AddPet (AddPetRequest) returns (AddPetResponse);
19+
rpc AddPet (AddPetRequest) returns (Pet);
2020

21-
rpc DeletePet (DeletePetRequest) returns (DeletePetResponse);
21+
rpc DeletePet (DeletePetRequest) returns (google.protobuf.Empty);
2222

2323
rpc FindPetsByStatus (FindPetsByStatusRequest) returns (FindPetsByStatusResponse);
2424

2525
rpc FindPetsByTags (FindPetsByTagsRequest) returns (FindPetsByTagsResponse);
2626

27-
rpc GetPetById (GetPetByIdRequest) returns (GetPetByIdResponse);
27+
rpc GetPetById (GetPetByIdRequest) returns (Pet);
2828

29-
rpc UpdatePet (UpdatePetRequest) returns (UpdatePetResponse);
29+
rpc UpdatePet (UpdatePetRequest) returns (Pet);
3030

31-
rpc UpdatePetWithForm (UpdatePetWithFormRequest) returns (UpdatePetWithFormResponse);
31+
rpc UpdatePetWithForm (UpdatePetWithFormRequest) returns (google.protobuf.Empty);
3232

33-
rpc UploadFile (UploadFileRequest) returns (UploadFileResponse);
33+
rpc UploadFile (UploadFileRequest) returns (ApiResponse);
3434

3535
}
3636

@@ -40,75 +40,45 @@ message AddPetRequest {
4040

4141
}
4242

43-
message AddPetResponse {
44-
oneof response {
45-
Pet pet_200 = 1;
46-
Error error_405 = 2;
47-
}
48-
}
4943
message DeletePetRequest {
5044
// Pet id to delete
5145
int64 pet_id = 1 [json_name="petId"];
5246
string api_key = 2;
5347

5448
}
5549

56-
message DeletePetResponse {
57-
oneof response {
58-
google.protobuf.Empty empty_400 = 1;
59-
}
60-
}
6150
message FindPetsByStatusRequest {
6251
// Status values that need to be considered for filter
6352
repeated string status = 1;
6453

6554
}
6655

6756
message FindPetsByStatusResponse {
68-
oneof response {
69-
Pet pet_200 = 1;
70-
google.protobuf.Empty empty_400 = 2;
71-
}
57+
repeated Pet data = 1;
7258
}
59+
7360
message FindPetsByTagsRequest {
7461
// Tags to filter by
7562
repeated string tags = 1;
7663

7764
}
7865

7966
message FindPetsByTagsResponse {
80-
oneof response {
81-
Pet pet_200 = 1;
82-
google.protobuf.Empty empty_400 = 2;
83-
}
67+
repeated Pet data = 1;
8468
}
69+
8570
message GetPetByIdRequest {
8671
// ID of pet to return
8772
int64 pet_id = 1 [json_name="petId"];
8873

8974
}
9075

91-
message GetPetByIdResponse {
92-
oneof response {
93-
Pet pet_200 = 1;
94-
google.protobuf.Empty empty_400 = 2;
95-
google.protobuf.Empty empty_404 = 3;
96-
}
97-
}
9876
message UpdatePetRequest {
9977
// Pet object that needs to be added to the store
10078
Pet pet = 1;
10179

10280
}
10381

104-
message UpdatePetResponse {
105-
oneof response {
106-
Pet pet_200 = 1;
107-
Error error_400 = 2;
108-
Error error_404 = 3;
109-
Error error_405 = 4;
110-
}
111-
}
11282
message UpdatePetWithFormRequest {
11383
// ID of pet that needs to be updated
11484
int64 pet_id = 1 [json_name="petId"];
@@ -119,11 +89,6 @@ message UpdatePetWithFormRequest {
11989

12090
}
12191

122-
message UpdatePetWithFormResponse {
123-
oneof response {
124-
google.protobuf.Empty empty_405 = 1;
125-
}
126-
}
12792
message UploadFileRequest {
12893
// ID of pet to update
12994
int64 pet_id = 1 [json_name="petId"];
@@ -134,8 +99,3 @@ message UploadFileRequest {
13499

135100
}
136101

137-
message UploadFileResponse {
138-
oneof response {
139-
ApiResponse api_response_200 = 1;
140-
}
141-
}

samples/config/petstore/protobuf-schema-config/services/store_service.proto

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ import "google/protobuf/empty.proto";
1616
import public "models/data.proto";
1717

1818
service StoreService {
19-
rpc DeleteOrder (DeleteOrderRequest) returns (DeleteOrderResponse);
19+
rpc DeleteOrder (DeleteOrderRequest) returns (google.protobuf.Empty);
2020

2121
rpc GetInventory (google.protobuf.Empty) returns (GetInventoryResponse);
2222

23-
rpc GetOrderById (GetOrderByIdRequest) returns (GetOrderByIdResponse);
23+
rpc GetOrderById (GetOrderByIdRequest) returns (Order);
2424

25-
rpc PlaceOrder (PlaceOrderRequest) returns (PlaceOrderResponse);
25+
rpc PlaceOrder (PlaceOrderRequest) returns (Order);
2626

2727
}
2828

@@ -32,39 +32,19 @@ message DeleteOrderRequest {
3232

3333
}
3434

35-
message DeleteOrderResponse {
36-
oneof response {
37-
google.protobuf.Empty empty_400 = 1;
38-
google.protobuf.Empty empty_404 = 2;
39-
}
40-
}
4135
message GetInventoryResponse {
42-
oneof response {
43-
int32 int32_200 = 1;
44-
}
36+
int32 data = 1;
4537
}
38+
4639
message GetOrderByIdRequest {
4740
// ID of pet that needs to be fetched
4841
int64 order_id = 1 [json_name="orderId"];
4942

5043
}
5144

52-
message GetOrderByIdResponse {
53-
oneof response {
54-
Order order_200 = 1;
55-
google.protobuf.Empty empty_400 = 2;
56-
google.protobuf.Empty empty_404 = 3;
57-
}
58-
}
5945
message PlaceOrderRequest {
6046
// order placed for purchasing the pet
6147
Order order = 1;
6248

6349
}
6450

65-
message PlaceOrderResponse {
66-
oneof response {
67-
Order order_200 = 1;
68-
google.protobuf.Empty empty_400 = 2;
69-
}
70-
}

0 commit comments

Comments
 (0)