Skip to content

Commit 05706ee

Browse files
fix enums entries, multipart support(partially), header, path and cookie serialization support
1 parent fb93494 commit 05706ee

7 files changed

Lines changed: 314 additions & 77 deletions

File tree

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ public ScalaSttp4JsoniterClientCodegen() {
8888
GlobalFeature.LinkObjects)
8989
.excludeSchemaSupportFeatures(
9090
SchemaSupportFeature.Polymorphism)
91-
.excludeParameterFeatures(
92-
ParameterFeature.Cookie)
9391
.includeClientModificationFeatures(
9492
ClientModificationFeature.BasePath,
9593
ClientModificationFeature.UserAgent));
@@ -117,6 +115,7 @@ public ScalaSttp4JsoniterClientCodegen() {
117115
additionalProperties.put("fnEnumEntry", new EnumEntryLambda());
118116
additionalProperties.put("fnCodecName", new CodecNameLambda());
119117
additionalProperties.put("fnHandleDownload", new HandleDownloadLambda());
118+
additionalProperties.put("fnEnumLeaf", new EnumLeafLambda());
120119

121120
// TODO: there is no specific sttp mapping. All Scala Type mappings should be in
122121
// AbstractScala
@@ -192,7 +191,7 @@ public String encodePath(String input) {
192191
StringBuffer buf = new StringBuffer(path.length());
193192
Matcher matcher = Pattern.compile("[{](.*?)[}]").matcher(path);
194193
while (matcher.find()) {
195-
matcher.appendReplacement(buf, "\\${" + toParamName(matcher.group(0)) + "}");
194+
matcher.appendReplacement(buf, "\\${" + toParamName(matcher.group(0)).replace("`", "") + "PathParam}");
196195
}
197196
matcher.appendTail(buf);
198197
return buf.toString();
@@ -673,13 +672,23 @@ public String formatFragment(String fragment) {
673672
}
674673
}
675674

676-
private class EnumEntryLambda extends CustomLambda {
675+
private static class EnumEntryLambda extends CustomLambda {
677676
@Override
678677
public String formatFragment(String fragment) {
679678
if (fragment.isBlank()) {
680679
return "NotPresent";
681680
}
682-
return formatIdentifier(fragment, true);
681+
return "`" + fragment + "`";
682+
}
683+
}
684+
685+
private static class EnumLeafLambda extends CustomLambda {
686+
@Override
687+
public String formatFragment(String fragment) {
688+
if (fragment.isBlank()) {
689+
return "NotPresent";
690+
}
691+
return fragment.replace("`", "");
683692
}
684693
}
685694

modules/openapi-generator/src/main/resources/scala-sttp4-jsoniter/api.mustache

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ import {{import}}
77
import {{invokerPackage}}.JsonSupport.{*, given}
88
import {{invokerPackage}}.FormSerializable
99
import {{invokerPackage}}.FormStyleFormat
10+
import {{invokerPackage}}.HeaderSerializable
11+
import {{invokerPackage}}.ApiKeyLocation
12+
import {{invokerPackage}}.PathStyleFormat
13+
import {{invokerPackage}}.PathSerializable
14+
import {{invokerPackage}}.CookieSerializable
1015
import {{invokerPackage}}.Helpers.*
1116
import sttp.client4.jsoniter.*
1217
import sttp.client4.*
@@ -42,15 +47,18 @@ case class {{classname}}[Auth <: {{invokerPackage}}.Authorization] private (base
4247
{{>javadoc}}
4348
{{/javadocRenderer}}
4449
def {{operationId}}{{>methodParameters}}: sttp.client4.Request[{{#separateErrorChannel}}Either[ResponseException[String], {{>operationReturnType}}]{{/separateErrorChannel}}{{^separateErrorChannel}}{{>operationReturnType}}{{/separateErrorChannel}}] =
50+
{{#pathParams}} val {{#fnEnumLeaf}}{{paramName}}PathParam{{/fnEnumLeaf}} = PathSerializable.serialize("{{baseName}}", {{{paramName}}}{{#style}}, PathStyleFormat.{{style.toUpperCase}}{{/style}}{{^style}}, PathStyleFormat.SIMPLE{{/style}}, {{isExplode}})
51+
{{/pathParams}}
4552
val requestURL =
4653
uri"$baseUrl{{{path}}}"{{#queryParams}}
4754
.addParams(FormSerializable.serialize("{{baseName}}", {{{paramName}}}{{#style}}, FormStyleFormat.{{style.toUpperCase}}{{/style}}{{^style}}, FormStyleFormat.FORM{{/style}}, {{isExplode}}): _*){{/queryParams}}
4855
4956
basicRequest
5057
.method(Method.{{httpMethod.toUpperCase}}, requestURL)
5158
.contentType({{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}{{^consumes}}"application/json"{{/consumes}}){{#headerParams}}
52-
.header({{>paramCreation}}){{/headerParams}}{{#authMethods}}
53-
.auth(authConfig{{#isApiKey}}, {{invokerPackage}}.{{#isKeyInQuery}}QUERY{{/isKeyInQuery}}{{#isKeyInHeader}}HEADER{{/isKeyInHeader}}{{#isKeyInCookie}}COOKIE{{/isKeyInCookie}}, "{{keyParamName}}"{{/isApiKey}}){{/authMethods}}{{#formParams.0}}{{^isMultipart}}
59+
.headers(HeaderSerializable.serialize("{{baseName}}", {{paramName}}, {{isExplode}})){{/headerParams}}{{#authMethods}}{{#cookieParams}}
60+
.cookies(CookieSerializable.serialize("{{baseName}}", {{paramName}}, {{isExplode}})){{/cookieParams}}
61+
.auth(authConfig{{#isApiKey}}, {{invokerPackage}}.ApiKeyLocation.{{#isKeyInQuery}}QUERY{{/isKeyInQuery}}{{#isKeyInHeader}}HEADER{{/isKeyInHeader}}{{#isKeyInCookie}}COOKIE{{/isKeyInCookie}}, "{{keyParamName}}"{{/isApiKey}}){{/authMethods}}{{#formParams.0}}{{^isMultipart}}
5462
.body({{#formParams}}
5563
{{>paramFormCreation}}{{^-last}} ++ {{/-last}}{{/formParams}},
5664
"utf-8"

0 commit comments

Comments
 (0)