Skip to content

Commit 5edc56f

Browse files
committed
added helper methods and import of marshallers for complex return types
1 parent 917ad11 commit 5edc56f

File tree

4 files changed

+67
-10
lines changed

4 files changed

+67
-10
lines changed

src/main/java/io/swagger/codegen/v3/generators/scala/AkkaHttpServerCodegen.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ public static Map<String, Object> setComplexTypes(Map<String, Object> objs) {
6868
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
6969
Boolean hasComplexTypes = Boolean.FALSE;
7070
Set<String> complexRequestTypes = new HashSet<>();
71+
Set<String> complexReturnTypes = new HashSet<>();
7172
for (CodegenOperation op : operationList) {
73+
Set<String> complexOperationReturnTypes = new HashSet<>();
7274
for(CodegenParameter parameter : op.allParams) {
7375
if(!parameter.getIsPrimitiveType()){
7476
if(parameter.getIsBodyParam()){
@@ -80,11 +82,15 @@ public static Map<String, Object> setComplexTypes(Map<String, Object> objs) {
8082
for(CodegenResponse response : op.responses) {
8183
if(!response.getIsPrimitiveType()){
8284
hasComplexTypes = Boolean.TRUE;
85+
complexReturnTypes.add(response.dataType);
86+
complexOperationReturnTypes.add(response.dataType);
8387
}
8488
}
89+
op.getVendorExtensions().put("complexReturnTypes", complexOperationReturnTypes);
8590
}
8691
objs.put("hasComplexTypes", hasComplexTypes);
8792
objs.put("complexRequestTypes", complexRequestTypes);
93+
objs.put("complexReturnTypes", complexReturnTypes);
8894

8995
return objs;
9096
}

src/main/resources/v2/scala/akka-http-server/api.mustache

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package {{package}}
33
import akka.http.scaladsl.server.Directives._
44
import akka.http.scaladsl.server.Route
55
{{^operations.complexRequestTypes.isEmpty}}import akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller
6+
import akka.http.scaladsl.marshalling.ToEntityMarshaller
67
{{/operations.complexRequestTypes.isEmpty}}
78
import {{invokerPackage}}.AkkaHttpHelper._
89
{{#imports}}import {{import}}
@@ -23,9 +24,9 @@ class {{classname}}(
2324
{{^queryParams.isEmpty}}parameters({{#vendorExtensions.queryParamsWithSupportedType}}"{{paramName}}".as[{{dataType}}]{{^required}}.?{{/required}}{{#hasMore}}, {{/hasMore}}{{/vendorExtensions.queryParamsWithSupportedType}}) { ({{#queryParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/queryParams}}) =>{{/queryParams.isEmpty}}
2425
{{#headerParams}}{{#required}}headerValueByName{{/required}}{{^required}}optionalHeaderValueByName{{/required}}("{{paramName}}") { {{paramName}} => {{/headerParams}}
2526
{{^formParams.isEmpty}}formFields({{#formParams}}"{{paramName}}".as[{{#isPrimitiveType}}{{dataType}}{{/isPrimitiveType}}{{^isPrimitiveType}}String{{/isPrimitiveType}}]{{^required}}.?{{/required}}{{#hasMore}}, {{/hasMore}}{{/formParams}}) { ({{#formParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/formParams}}) =>{{/formParams.isEmpty}}
26-
{{^bodyParam.isPrimitiveType}}entity(as[{{bodyParam.dataType}}]){ body =>{{/bodyParam.isPrimitiveType}}
27+
{{#bodyParam}}{{^isPrimitiveType}}entity(as[{{dataType}}]){ body =>{{/isPrimitiveType}}{{/bodyParam}}
2728
{{classVarName}}Service.{{operationId}}({{#allParams}}{{paramName}} = {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
28-
{{^bodyParam.isPrimitiveType}} }{{/bodyParam.isPrimitiveType}}
29+
{{#bodyParam}}{{^isPrimitiveType}} }{{/isPrimitiveType}}{{/bodyParam}}
2930
{{^formParams.isEmpty}} }{{/formParams.isEmpty}}
3031
{{#headerParams}} }{{/headerParams}}
3132
{{^queryParams.isEmpty}} }{{/queryParams.isEmpty}}
@@ -37,20 +38,29 @@ class {{classname}}(
3738
trait {{classname}}Service {
3839
3940
{{#operation}}
41+
{{#responses}} def {{operationId}}{{code}}{{#dataType}}(response{{dataType}}: {{dataType}}){{^isPrimitiveType}}(implicit toEntityMarshaller{{dataType}}: ToEntityMarshaller[{{dataType}}]){{/isPrimitiveType}}{{/dataType}}: Route =
42+
complete(({{code}}, {{#dataType}}response{{dataType}}{{/dataType}}{{^dataType}}"{{message}}"{{/dataType}}))
43+
{{/responses}}
4044
/**
4145
{{#responses}} * {{#code}}Code: {{.}},{{/code}} {{#message}}Message: {{.}},{{/message}} {{#dataType}}DataType: {{.}}{{/dataType}}
4246
{{/responses}}
4347
*/
44-
def {{operationId}}({{#vendorExtensions.paramsWithSupportedType}}{{paramName}}: {{^required}}Option[{{/required}}{{dataType}}{{^required}}]{{/required}}{{#hasMore}}, {{/hasMore}}{{/vendorExtensions.paramsWithSupportedType}}): Route
48+
def {{operationId}}({{#vendorExtensions.paramsWithSupportedType}}{{paramName}}: {{^required}}Option[{{/required}}{{dataType}}{{^required}}]{{/required}}{{#hasMore}}, {{/hasMore}}{{/vendorExtensions.paramsWithSupportedType}}){{^vendorExtensions.complexReturnTypes.isEmpty}}
49+
(implicit {{#vendorExtensions.complexReturnTypes}}toEntityMarshaller{{.}}: ToEntityMarshaller[{{.}}]{{^-last}}, {{/-last}}{{/vendorExtensions.complexReturnTypes}}){{/vendorExtensions.complexReturnTypes.isEmpty}}: Route
4550

4651
{{/operation}}
4752
}
4853

4954
{{#hasComplexTypes}}
5055
trait {{classname}}Marshaller {
56+
{{#complexRequestTypes}} implicit def fromRequestUnmarshaller{{.}}: FromRequestUnmarshaller[{{.}}]
5157

52-
{{#complexRequestTypes}}implicit def fromRequestUnmarshaller{{.}}: FromRequestUnmarshaller[{{.}}]
53-
{{/complexRequestTypes}}
54-
}{{/hasComplexTypes}}
58+
{{/complexRequestTypes}}
59+
60+
{{#complexReturnTypes}} implicit def toEntityMarshaller{{.}}: ToEntityMarshaller[{{.}}]
61+
62+
{{/complexReturnTypes}}
63+
}
64+
{{/hasComplexTypes}}
5565

5666
{{/operations}}

src/test/java/io/swagger/codegen/v3/generators/scala/AkkaHttpServerCodegenTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public void testSetComplexTypes() {
2020
CodegenParameter param3 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
2121
CodegenParameter param4 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
2222
CodegenParameter param5 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
23+
CodegenResponse response1 = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
24+
CodegenResponse response2 = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
25+
CodegenResponse response3 = CodegenModelFactory.newInstance(CodegenModelType.RESPONSE);
2326

2427
param1.dataType = "Pet";
2528
param1.getVendorExtensions().put(CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME, Boolean.FALSE);
@@ -36,7 +39,12 @@ public void testSetComplexTypes() {
3639
param5.dataType = "Order";
3740
param5.getVendorExtensions().put(CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME, Boolean.FALSE);
3841
param5.getVendorExtensions().put(CodegenConstants.IS_QUERY_PARAM_EXT_NAME, Boolean.TRUE);
39-
42+
response1.dataType = "Pet";
43+
response1.getVendorExtensions().put(CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME, Boolean.FALSE);
44+
response2.dataType = "Pet";
45+
response2.getVendorExtensions().put(CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME, Boolean.FALSE);
46+
response3.dataType = "User";
47+
response3.getVendorExtensions().put(CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME, Boolean.FALSE);
4048
codegenOperation1.bodyParam = param1;
4149
codegenOperation1.bodyParams.add(param1);
4250
codegenOperation1.allParams.add(param1);
@@ -51,6 +59,9 @@ public void testSetComplexTypes() {
5159
codegenOperation4.allParams.add(param4);
5260
codegenOperation4.queryParams.add(param5);
5361
codegenOperation4.allParams.add(param5);
62+
codegenOperation1.responses.add(response1);
63+
codegenOperation2.responses.add(response2);
64+
codegenOperation2.responses.add(response3);
5465

5566
List<CodegenOperation> operationList = new LinkedList<CodegenOperation>(){{
5667
addAll(Arrays.asList(
@@ -69,6 +80,9 @@ public void testSetComplexTypes() {
6980

7081
Assert.assertEquals(result.get("hasComplexTypes"), Boolean.TRUE);
7182
Assert.assertEquals(result.get("complexRequestTypes"), new HashSet<String>(){{addAll(Arrays.asList("Pet","User"));}});
83+
Assert.assertEquals(result.get("complexReturnTypes"), new HashSet<String>(){{addAll(Arrays.asList("Pet","User"));}});
84+
Assert.assertEquals(codegenOperation1.getVendorExtensions().get("complexReturnTypes"), new HashSet<String>(){{addAll(Collections.singletonList("Pet"));}});
85+
Assert.assertEquals(codegenOperation2.getVendorExtensions().get("complexReturnTypes"), new HashSet<String>(){{addAll(Arrays.asList("Pet","User"));}});
7286
}
7387

7488
@Test

src/test/java/io/swagger/codegen/v3/generators/scala/return-model.json

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,45 @@
6161
}
6262
}
6363
},
64-
"400": {
65-
"description": "Invalid ID supplied"
66-
},
6764
"404": {
6865
"description": "Pet not found"
66+
},
67+
"500": {
68+
"description": "server error",
69+
"content": {
70+
"application/json": {
71+
"schema": {
72+
"$ref": "#/components/schemas/Error"
73+
}
74+
},
75+
"application/xml": {
76+
"schema": {
77+
"$ref": "#/components/schemas/Error"
78+
}
79+
}
80+
}
6981
}
7082
}
7183
}
7284
}
7385
},
7486
"components": {
7587
"schemas": {
88+
"Error": {
89+
"type": "object",
90+
"properties": {
91+
"code": {
92+
"type": "integer",
93+
"format": "int64"
94+
},
95+
"message": {
96+
"type": "string"
97+
}
98+
},
99+
"xml": {
100+
"name": "Error"
101+
}
102+
},
76103
"Category": {
77104
"type": "object",
78105
"properties": {

0 commit comments

Comments
 (0)