Skip to content

Commit 7f7d716

Browse files
committed
feat(kotlin): add generateModelBuilders option to data_class.mustache
1 parent 11a0075 commit 7f7d716

1 file changed

Lines changed: 48 additions & 1 deletion

File tree

modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ import java.io.Serializable
6262
import {{roomModelPackage}}.{{classname}}RoomModel
6363
import {{packageName}}.infrastructure.ITransformForStorage
6464
{{/generateRoomModels}}
65+
{{#generateModelBuilders}}
66+
import kotlin.properties.Delegates
67+
{{/generateModelBuilders}}
6568

6669
/**
6770
* {{{description}}}
@@ -90,13 +93,47 @@ import {{packageName}}.infrastructure.ITransformForStorage
9093
@SerialName(value = {{#lambda.doublequote}}{{{additionalProperties.discriminatorValue}}}{{/lambda.doublequote}})
9194
{{/additionalProperties.discriminatorValue}}
9295
{{/kotlinx_serialization}}
93-
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#discriminator}}{{#kotlinx_serialization}}sealed class{{/kotlinx_serialization}}{{^kotlinx_serialization}}interface{{/kotlinx_serialization}}{{/discriminator}}{{^discriminator}}{{#hasVars}}data {{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} (
96+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#discriminator}}{{#kotlinx_serialization}}sealed class{{/kotlinx_serialization}}{{^kotlinx_serialization}}interface{{/kotlinx_serialization}}{{/discriminator}}{{^discriminator}}{{#hasVars}}{{^generateModelBuilders}}data {{/generateModelBuilders}}{{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} {{#generateModelBuilders}}internal constructor{{/generateModelBuilders}}(
9497

9598
{{#allVars}}
9699
{{#required}}{{>data_class_req_var}}{{/required}}{{^required}}{{>data_class_opt_var}}{{/required}}{{^-last}},{{/-last}}
97100

98101
{{/allVars}}
99102
){{/discriminator}}{{#parent}}{{^serializableModel}}{{^parcelizeModels}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#kotlinx_serialization}}(){{/kotlinx_serialization}}{{#isArray}}(){{/isArray}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{^parcelizeModels}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{#parcelizeModels}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Parcelable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{#parcelizeModels}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, Parcelable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{^parcelizeModels}} : Serializable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{#parcelizeModels}} : Serializable, Parcelable{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#generateRoomModels}}{{#parent}}, {{/parent}}{{^discriminator}}{{^parent}}:{{/parent}} ITransformForStorage<{{classname}}RoomModel>{{/discriminator}}{{/generateRoomModels}}{{#vendorExtensions.x-has-data-class-body}} {
103+
{{#generateModelBuilders}}
104+
{{^discriminator}}
105+
106+
/**
107+
* Mutable builder for {{classname}}
108+
*/
109+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Builder internal constructor() {
110+
{{#allVars}}
111+
{{#required}}
112+
{{#isPrimitiveType}}
113+
{{#isString}}
114+
lateinit var {{{name}}}: {{{dataType}}}
115+
{{/isString}}
116+
{{^isString}}
117+
var {{{name}}}: {{{dataType}}} by Delegates.notNull()
118+
{{/isString}}
119+
{{/isPrimitiveType}}
120+
{{^isPrimitiveType}}
121+
lateinit var {{{name}}}: {{{dataType}}}
122+
{{/isPrimitiveType}}
123+
{{/required}}
124+
{{^required}}
125+
var {{{name}}}: {{{dataType}}}? = null
126+
{{/required}}
127+
{{/allVars}}
128+
129+
internal fun build(): {{classname}} = {{classname}}(
130+
{{#allVars}}
131+
{{{name}}} = {{{name}}}{{^-last}},{{/-last}}
132+
{{/allVars}}
133+
)
134+
}
135+
{{/discriminator}}
136+
{{/generateModelBuilders}}
100137
{{/vendorExtensions.x-has-data-class-body}}
101138
{{#generateRoomModels}}
102139
companion object { }
@@ -387,4 +424,14 @@ import {{packageName}}.infrastructure.ITransformForStorage
387424

388425
{{#vendorExtensions.x-has-data-class-body}}
389426
}
427+
{{^discriminator}}
428+
{{#generateModelBuilders}}
429+
430+
/**
431+
* Kotlin DSL for {{classname}}
432+
*/
433+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{classname}}(block: {{classname}}.Builder.() -> Unit): {{classname}} =
434+
{{classname}}.Builder().apply(block).build()
435+
{{/generateModelBuilders}}
436+
{{/discriminator}}
390437
{{/vendorExtensions.x-has-data-class-body}}

0 commit comments

Comments
 (0)