From 5e6b4cb7881372acb460c397107184ab454ad6d0 Mon Sep 17 00:00:00 2001 From: Nasser Anssari Date: Thu, 5 Dec 2024 16:14:03 +0300 Subject: [PATCH] feat: construct operation params from links --- .../operation_params.mustache | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/customizations/generator/openapi/src/main/resources/templates/expediagroup-sdk/operation_params.mustache b/customizations/generator/openapi/src/main/resources/templates/expediagroup-sdk/operation_params.mustache index a3337ab7ac..f415c1231e 100644 --- a/customizations/generator/openapi/src/main/resources/templates/expediagroup-sdk/operation_params.mustache +++ b/customizations/generator/openapi/src/main/resources/templates/expediagroup-sdk/operation_params.mustache @@ -10,7 +10,9 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.ktor.http.Headers import io.ktor.http.Parameters + import io.ktor.http.parseUrlEncodedParameters + import java.net.URI import javax.validation.constraints.Max import javax.validation.constraints.Min import javax.validation.constraints.NotNull @@ -91,15 +93,25 @@ {{#isEnum}} enum class {{enumName}}( val value: - {{#isContainer}}{{{items.dataType}}}{{/isContainer}} - {{^isContainer}}{{dataType}}{{/isContainer}} + {{#isContainer}}{{{items.dataType}}}{{/isContainer}} + {{^isContainer}}{{dataType}}{{/isContainer}} ) { {{#allowableValues}} {{#enumVars}} {{name}}({{{value}}}) {{^-last}},{{/-last}} + {{#-last}};{{/-last}} {{/enumVars}} {{/allowableValues}} + + companion object { + private val map = entries.associateBy { it.value } + infix fun from( + value: + {{#isContainer}}{{{items.dataType}}}{{/isContainer}} + {{^isContainer}}{{dataType}}{{/isContainer}} + ) = map[value] + } } {{/isEnum}} {{/params}} @@ -122,6 +134,46 @@ {{/params}} {{/nonBodyParams}} + {{#isLinkable}} + companion object { + @JvmStatic + fun from(link: {{classname}}Link) : Builder { + val uri = link.href?.let { URI(it) } + val params = uri?.query?.parseUrlEncodedParameters() + + val builder = Builder() + + {{#nonBodyParams}} + {{#params}} + val {{{paramName}}} = + {{#isContainer}} + params?.getAll("{{{paramName}}}") + {{#isEnum}} + ?.mapNotNull { {{enumName}}.from(it) } + {{/isEnum}} + {{/isContainer}} + {{^isCollection}} + params?.get("{{{paramName}}}") + {{#isEnum}} + ?.let { {{enumName}}.from(it) } + {{/isEnum}} + {{/isCollection}} + + {{{paramName}}}?.let { + builder.{{{paramName}}}( + it + {{#isNumber}}.toBigDecimal(){{/isNumber}} + {{#isBoolean}}.toBoolean(){{/isBoolean}} + ) + } + {{/params}} + {{/nonBodyParams}} + + return builder + } + } + {{/isLinkable}} + fun build(): {{classname}}Params { val params = {{classname}}Params( {{#nonBodyParams}}