Skip to content

Commit b7992aa

Browse files
authored
Merge pull request #479 from crazyk2/kotlin-template-impr
Kotlin-client template improvements. Less boilerplate code will be ge…
2 parents 219cb45 + c868577 commit b7992aa

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

src/main/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegen.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package io.swagger.codegen.v3.generators.kotlin;
22

3+
import com.github.jknack.handlebars.Handlebars;
4+
import com.github.jknack.handlebars.helper.ConditionalHelpers;
35
import io.swagger.codegen.v3.CliOption;
46
import io.swagger.codegen.v3.CodegenType;
57
import io.swagger.codegen.v3.SupportingFile;
8+
import org.apache.commons.lang3.StringUtils;
69
import org.slf4j.Logger;
710
import org.slf4j.LoggerFactory;
811

912
import java.io.File;
1013
import java.util.HashMap;
1114
import java.util.Map;
1215

13-
import org.apache.commons.lang3.StringUtils;
14-
1516
public class KotlinClientCodegen extends AbstractKotlinCodegen {
1617

17-
public static final String DATE_LIBRARY = "dateLibrary";
18+
public static final String DATE_LIBRARY = "dateLibrary";
1819
private static Logger LOGGER = LoggerFactory.getLogger(KotlinClientCodegen.class);
1920

2021
protected String dateLibrary = DateLibrary.JAVA8.value;
@@ -57,6 +58,12 @@ public KotlinClientCodegen() {
5758
cliOptions.add(dateLibrary);
5859
}
5960

61+
@Override
62+
public void addHandlebarHelpers(Handlebars handlebars) {
63+
super.addHandlebarHelpers(handlebars);
64+
handlebars.registerHelpers(ConditionalHelpers.class);
65+
}
66+
6067
@Override
6168
public String getDefaultTemplateDir() {
6269
return "kotlin-client";
@@ -80,7 +87,7 @@ public void setDateLibrary(String library) {
8087

8188
@Override
8289
public void processOpts() {
83-
super.processOpts();
90+
super.processOpts();
8491

8592
if (StringUtils.isBlank(templateDir)) {
8693
embeddedTemplateDir = templateDir = getTemplateDir();
@@ -90,7 +97,7 @@ public void processOpts() {
9097
setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString());
9198
}
9299

93-
if (DateLibrary.THREETENBP.value.equals(dateLibrary)) {
100+
if (DateLibrary.THREETENBP.value.equals(dateLibrary)) {
94101
additionalProperties.put(DateLibrary.THREETENBP.value, true);
95102
typeMapping.put("date", "LocalDate");
96103
typeMapping.put("DateTime", "LocalDateTime");
@@ -123,4 +130,4 @@ public void processOpts() {
123130
supportingFiles.add(new SupportingFile("infrastructure/Serializer.kt.mustache", infrastructureFolder, "Serializer.kt"));
124131
supportingFiles.add(new SupportingFile("infrastructure/Errors.kt.mustache", infrastructureFolder, "Errors.kt"));
125132
}
126-
}
133+
}

src/main/resources/handlebars/kotlin-client/api.mustache

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,26 @@ class {{classname}}(basePath: kotlin.String = "{{{basePath}}}") : ApiClient(base
1515
{{#operation}}
1616
{{#contents}}
1717
/**
18-
* {{summary}}
19-
* {{notes}}
20-
{{#parameters}}* @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
21-
{{/parameters}}* @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
22-
*/{{#returnType}}
18+
* {{summary}}
19+
* {{notes}}
20+
{{#parameters}} * @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
21+
{{/parameters}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
22+
*/{{#returnType}}
2323
@Suppress("UNCHECKED_CAST"){{/returnType}}
24-
fun {{operationId}}({{#parameters}}{{paramName}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) : {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}} {
24+
fun {{operationId}}({{#parameters}}{{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#hasMore}}, {{/hasMore}}{{/parameters}}): {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}} {
25+
{{#or hasFormParams hasBodyParam}}
2526
val localVariableBody: kotlin.Any? = {{#hasBodyParam}}{{#bodyParams}}{{paramName}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}null{{/hasFormParams}}{{#hasFormParams}}mapOf({{#formParams}}"{{{baseName}}}" to "${{paramName}}"{{#hasMore}}, {{/hasMore}}{{/formParams}}){{/hasFormParams}}{{/hasBodyParam}}
26-
val localVariableQuery: MultiValueMap = {{^hasQueryParams}}mapOf(){{/hasQueryParams}}{{#hasQueryParams}}mapOf({{#queryParams}}"{{baseName}}" to {{#isContainer}}toMultiValue({{paramName}}.toList(), "{{collectionFormat}}"){{/isContainer}}{{^isContainer}}listOf("${{paramName}}"){{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/queryParams}}){{/hasQueryParams}}
27-
val localVariableHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf({{#hasFormParams}}"Content-Type" to "multipart/form-data"{{/hasFormParams}}{{^hasHeaderParams}}){{/hasHeaderParams}}{{#hasHeaderParams}}{{#hasFormParams}}, {{/hasFormParams}}{{#headerParams}}"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(separator = collectionDelimiter("{{collectionFormat}}"){{/isContainer}}{{^isContainer}}{{paramName}}{{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/headerParams}}){{/hasHeaderParams}}
27+
{{/or}}
28+
{{#hasQueryParams}}val localVariableQuery: MultiValueMap = mapOf({{#queryParams}}"{{baseName}}" to {{#isContainer}}toMultiValue({{paramName}}.toList(), "{{collectionFormat}}"){{/isContainer}}{{^isContainer}}listOf("${{paramName}}"){{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/queryParams}}){{/hasQueryParams}}
29+
{{#or hasFormParams hasHeaderParams}}
30+
val localVariableHeaders: kotlin.collections.Map<kotlin.String, kotlin.String> = mapOf({{#hasFormParams}}"Content-Type" to "multipart/form-data"{{/hasFormParams}}{{^hasHeaderParams}}){{/hasHeaderParams}}{{#hasHeaderParams}}{{#hasFormParams}}, {{/hasFormParams}}{{#headerParams}}"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(separator = collectionDelimiter("{{collectionFormat}}"){{/isContainer}}{{^isContainer}}{{paramName}}{{/isContainer}}{{#hasMore}}, {{/hasMore}}{{/headerParams}}){{/hasHeaderParams}}
31+
{{/or}}
2832
val localVariableConfig = RequestConfig(
29-
RequestMethod.{{httpMethod}},
30-
"{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", "${{paramName}}"){{/pathParams}},
31-
query = localVariableQuery,
32-
headers = localVariableHeaders
33+
RequestMethod.{{httpMethod}},
34+
"{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{paramName}}"){{/pathParams}}{{#hasQueryParams}}, query = localVariableQuery{{/hasQueryParams}}{{#or hasFormParams hasHeaderParams}}, headers = localVariableHeaders{{/or}}
3335
)
3436
val response = request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Any?{{/returnType}}>(
35-
localVariableConfig,
36-
localVariableBody
37+
localVariableConfig{{#or hasFormParams hasHeaderParams}}, localVariableBody{{/or}}
3738
)
3839

3940
return when (response.responseType) {
@@ -49,4 +50,4 @@ class {{classname}}(basePath: kotlin.String = "{{{basePath}}}") : ApiClient(base
4950
{{/contents}}
5051
{{/operation}}
5152
}
52-
{{/operations}}
53+
{{/operations}}

0 commit comments

Comments
 (0)