Skip to content

Commit 5e6b4cb

Browse files
committed
feat: construct operation params from links
1 parent 18eebd9 commit 5e6b4cb

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

customizations/generator/openapi/src/main/resources/templates/expediagroup-sdk/operation_params.mustache

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
1111
import io.ktor.http.Headers
1212
import io.ktor.http.Parameters
13+
import io.ktor.http.parseUrlEncodedParameters
1314

15+
import java.net.URI
1416
import javax.validation.constraints.Max
1517
import javax.validation.constraints.Min
1618
import javax.validation.constraints.NotNull
@@ -91,15 +93,25 @@
9193
{{#isEnum}}
9294
enum class {{enumName}}(
9395
val value:
94-
{{#isContainer}}{{{items.dataType}}}{{/isContainer}}
95-
{{^isContainer}}{{dataType}}{{/isContainer}}
96+
{{#isContainer}}{{{items.dataType}}}{{/isContainer}}
97+
{{^isContainer}}{{dataType}}{{/isContainer}}
9698
) {
9799
{{#allowableValues}}
98100
{{#enumVars}}
99101
{{name}}({{{value}}})
100102
{{^-last}},{{/-last}}
103+
{{#-last}};{{/-last}}
101104
{{/enumVars}}
102105
{{/allowableValues}}
106+
107+
companion object {
108+
private val map = entries.associateBy { it.value }
109+
infix fun from(
110+
value:
111+
{{#isContainer}}{{{items.dataType}}}{{/isContainer}}
112+
{{^isContainer}}{{dataType}}{{/isContainer}}
113+
) = map[value]
114+
}
103115
}
104116
{{/isEnum}}
105117
{{/params}}
@@ -122,6 +134,46 @@
122134
{{/params}}
123135
{{/nonBodyParams}}
124136

137+
{{#isLinkable}}
138+
companion object {
139+
@JvmStatic
140+
fun from(link: {{classname}}Link) : Builder {
141+
val uri = link.href?.let { URI(it) }
142+
val params = uri?.query?.parseUrlEncodedParameters()
143+
144+
val builder = Builder()
145+
146+
{{#nonBodyParams}}
147+
{{#params}}
148+
val {{{paramName}}} =
149+
{{#isContainer}}
150+
params?.getAll("{{{paramName}}}")
151+
{{#isEnum}}
152+
?.mapNotNull { {{enumName}}.from(it) }
153+
{{/isEnum}}
154+
{{/isContainer}}
155+
{{^isCollection}}
156+
params?.get("{{{paramName}}}")
157+
{{#isEnum}}
158+
?.let { {{enumName}}.from(it) }
159+
{{/isEnum}}
160+
{{/isCollection}}
161+
162+
{{{paramName}}}?.let {
163+
builder.{{{paramName}}}(
164+
it
165+
{{#isNumber}}.toBigDecimal(){{/isNumber}}
166+
{{#isBoolean}}.toBoolean(){{/isBoolean}}
167+
)
168+
}
169+
{{/params}}
170+
{{/nonBodyParams}}
171+
172+
return builder
173+
}
174+
}
175+
{{/isLinkable}}
176+
125177
fun build(): {{classname}}Params {
126178
val params = {{classname}}Params(
127179
{{#nonBodyParams}}

0 commit comments

Comments
 (0)