Skip to content

Commit 0576a83

Browse files
committed
Change naming of wrapper classes
1 parent 8061dec commit 0576a83

File tree

5 files changed

+38
-25
lines changed

5 files changed

+38
-25
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.fasterxml.jackson.databind.node.ArrayNode;
2121
import com.google.common.collect.ImmutableMap;
2222
import com.samskivert.mustache.Mustache;
23+
import com.samskivert.mustache.Template;
2324
import io.swagger.v3.oas.models.media.Schema;
2425
import io.swagger.v3.oas.models.media.StringSchema;
2526
import lombok.Getter;
@@ -35,6 +36,9 @@
3536
import org.slf4j.LoggerFactory;
3637

3738
import java.io.File;
39+
import java.io.IOException;
40+
import java.io.StringWriter;
41+
import java.io.Writer;
3842
import java.util.*;
3943
import java.util.function.Function;
4044
import java.util.regex.Pattern;
@@ -1172,4 +1176,15 @@ protected void doDataTypeAssignment(final String returnType, DataTypeAssigner da
11721176
}
11731177
}
11741178
}
1179+
1180+
protected static abstract class CustomLambda implements Mustache.Lambda {
1181+
@Override
1182+
public void execute(Template.Fragment frag, Writer out) throws IOException {
1183+
final StringWriter tempWriter = new StringWriter();
1184+
frag.execute(tempWriter);
1185+
out.write(formatFragment(tempWriter.toString()));
1186+
}
1187+
1188+
public abstract String formatFragment(String fragment);
1189+
}
11751190
}

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import lombok.Setter;
2323
import org.apache.commons.lang3.StringUtils;
2424
import org.openapitools.codegen.*;
25-
import org.openapitools.codegen.meta.features.*;
2625
import org.openapitools.codegen.model.ModelMap;
2726
import org.openapitools.codegen.model.ModelsMap;
2827
import org.openapitools.codegen.model.OperationMap;
@@ -40,10 +39,8 @@
4039
import java.util.stream.Collectors;
4140
import java.util.stream.Stream;
4241

43-
import com.samskivert.mustache.Mustache;
4442
import lombok.Getter;
4543
import lombok.Setter;
46-
import org.apache.commons.lang3.StringUtils;
4744
import org.openapitools.codegen.CliOption;
4845
import org.openapitools.codegen.CodegenConstants;
4946
import org.openapitools.codegen.CodegenModel;
@@ -60,14 +57,7 @@
6057
import org.openapitools.codegen.meta.features.SchemaSupportFeature;
6158
import org.openapitools.codegen.meta.features.SecurityFeature;
6259
import org.openapitools.codegen.meta.features.WireFormatFeature;
63-
import org.openapitools.codegen.model.ModelMap;
64-
import org.openapitools.codegen.model.ModelsMap;
65-
import org.openapitools.codegen.model.OperationMap;
66-
import org.openapitools.codegen.model.OperationsMap;
6760
import org.openapitools.codegen.templating.mustache.ReplaceAllLambda;
68-
import org.openapitools.codegen.utils.ProcessUtils;
69-
import org.slf4j.Logger;
70-
import org.slf4j.LoggerFactory;
7161

7262
import static java.util.Collections.sort;
7363

@@ -569,6 +559,7 @@ public void processOpts() {
569559
// as the parser interrupts that as a start of a multiline comment.
570560
// We replace paths like `/v1/foo/*` with `/v1/foo/<*>` to avoid this
571561
additionalProperties.put("sanitizePathComment", new ReplaceAllLambda("\\/\\*", "/<*>"));
562+
additionalProperties.put("fnToOneOfWrapperName", new ToOneOfWrapperName());
572563
}
573564

574565
private void processDateLibrary() {
@@ -1150,6 +1141,13 @@ private void adjustEnumRefDefault(CodegenParameter param) {
11501141
param.defaultValue = type + "." + param.enumDefaultValue;
11511142
}
11521143

1144+
private class ToOneOfWrapperName extends CustomLambda {
1145+
@Override
1146+
public String formatFragment(String fragment) {
1147+
return toModelName(StringUtils.lowerCase(fragment)) + "Wrapper";
1148+
}
1149+
}
1150+
11531151
@Override
11541152
public void postProcess() {
11551153
System.out.println("################################################################################");

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ import java.io.IOException
110110
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}sealed interface {{classname}} {
111111
{{#discriminator.mappedModels}}
112112
@JvmInline
113-
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}} value class {{modelName}}{{classname}}(val value: {{modelName}}) : {{classname}}
113+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}} value class {{#fnToOneOfWrapperName}}{{mappingName}}{{/fnToOneOfWrapperName}}(val value: {{modelName}}) : {{classname}}
114114

115115
{{/discriminator.mappedModels}}
116116
}
@@ -122,7 +122,7 @@ import java.io.IOException
122122
require(encoder is JsonEncoder)
123123
val jsonObject = when (value) {
124124
{{#discriminator.mappedModels}}
125-
is {{classname}}.{{modelName}}{{classname}} -> {
125+
is {{classname}}.{{#fnToOneOfWrapperName}}{{mappingName}}{{/fnToOneOfWrapperName}} -> {
126126
val jsonMap = encoder.json.encodeToJsonElement({{modelName}}.serializer(), value.value).jsonObject.toMutableMap()
127127
jsonMap["{{discriminator.propertyBaseName}}"] = JsonPrimitive("{{mappingName}}")
128128
JsonObject(jsonMap)
@@ -143,7 +143,7 @@ import java.io.IOException
143143
{{#discriminator.mappedModels}}
144144
"{{mappingName}}" -> {
145145
val decoded = decoder.json.decodeFromJsonElement({{modelName}}.serializer(), element)
146-
{{classname}}.{{modelName}}{{classname}}(decoded)
146+
{{classname}}.{{#fnToOneOfWrapperName}}{{mappingName}}{{/fnToOneOfWrapperName}}(decoded)
147147
}
148148
{{/discriminator.mappedModels}}
149149
else -> throw SerializationException("Unknown {{classname}} {{discriminator.propertyBaseName}}: $discriminatorValue")

samples/client/others/kotlin-oneOf-discriminator-kotlinx-serialization/src/main/kotlin/org/openapitools/client/models/Animal.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ import kotlinx.serialization.json.jsonPrimitive
4343
@Serializable(with = AnimalSerializer::class)
4444
sealed interface Animal {
4545
@JvmInline
46-
value class BirdAnimal(val value: Bird) : Animal
46+
value class BirdWrapper(val value: Bird) : Animal
4747

4848
@JvmInline
49-
value class RobobirdAnimal(val value: Robobird) : Animal
49+
value class RobobirdWrapper(val value: Robobird) : Animal
5050

5151
}
5252

@@ -56,12 +56,12 @@ object AnimalSerializer : KSerializer<Animal> {
5656
override fun serialize(encoder: Encoder, value: Animal) {
5757
require(encoder is JsonEncoder)
5858
val jsonObject = when (value) {
59-
is Animal.BirdAnimal -> {
59+
is Animal.BirdWrapper -> {
6060
val jsonMap = encoder.json.encodeToJsonElement(Bird.serializer(), value.value).jsonObject.toMutableMap()
6161
jsonMap["discriminator"] = JsonPrimitive("BIRD")
6262
JsonObject(jsonMap)
6363
}
64-
is Animal.RobobirdAnimal -> {
64+
is Animal.RobobirdWrapper -> {
6565
val jsonMap = encoder.json.encodeToJsonElement(Robobird.serializer(), value.value).jsonObject.toMutableMap()
6666
jsonMap["discriminator"] = JsonPrimitive("ROBOBIRD")
6767
JsonObject(jsonMap)
@@ -80,11 +80,11 @@ object AnimalSerializer : KSerializer<Animal> {
8080
return when (discriminatorValue) {
8181
"BIRD" -> {
8282
val decoded = decoder.json.decodeFromJsonElement(Bird.serializer(), element)
83-
Animal.BirdAnimal(decoded)
83+
Animal.BirdWrapper(decoded)
8484
}
8585
"ROBOBIRD" -> {
8686
val decoded = decoder.json.decodeFromJsonElement(Robobird.serializer(), element)
87-
Animal.RobobirdAnimal(decoded)
87+
Animal.RobobirdWrapper(decoded)
8888
}
8989
else -> throw SerializationException("Unknown Animal discriminator: $discriminatorValue")
9090
}

samples/client/others/kotlin-oneOf-discriminator-kotlinx-serialization/src/main/kotlin/org/openapitools/client/models/AnotherAnimal.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ import kotlinx.serialization.json.jsonPrimitive
4343
@Serializable(with = AnotherAnimalSerializer::class)
4444
sealed interface AnotherAnimal {
4545
@JvmInline
46-
value class BirdAnotherAnimal(val value: Bird) : AnotherAnimal
46+
value class AnotherBirdWrapper(val value: Bird) : AnotherAnimal
4747

4848
@JvmInline
49-
value class RobobirdAnotherAnimal(val value: Robobird) : AnotherAnimal
49+
value class AnotherRobobirdWrapper(val value: Robobird) : AnotherAnimal
5050

5151
}
5252

@@ -56,12 +56,12 @@ object AnotherAnimalSerializer : KSerializer<AnotherAnimal> {
5656
override fun serialize(encoder: Encoder, value: AnotherAnimal) {
5757
require(encoder is JsonEncoder)
5858
val jsonObject = when (value) {
59-
is AnotherAnimal.BirdAnotherAnimal -> {
59+
is AnotherAnimal.AnotherBirdWrapper -> {
6060
val jsonMap = encoder.json.encodeToJsonElement(Bird.serializer(), value.value).jsonObject.toMutableMap()
6161
jsonMap["another_discriminator"] = JsonPrimitive("ANOTHER_BIRD")
6262
JsonObject(jsonMap)
6363
}
64-
is AnotherAnimal.RobobirdAnotherAnimal -> {
64+
is AnotherAnimal.AnotherRobobirdWrapper -> {
6565
val jsonMap = encoder.json.encodeToJsonElement(Robobird.serializer(), value.value).jsonObject.toMutableMap()
6666
jsonMap["another_discriminator"] = JsonPrimitive("ANOTHER_ROBOBIRD")
6767
JsonObject(jsonMap)
@@ -80,11 +80,11 @@ object AnotherAnimalSerializer : KSerializer<AnotherAnimal> {
8080
return when (discriminatorValue) {
8181
"ANOTHER_BIRD" -> {
8282
val decoded = decoder.json.decodeFromJsonElement(Bird.serializer(), element)
83-
AnotherAnimal.BirdAnotherAnimal(decoded)
83+
AnotherAnimal.AnotherBirdWrapper(decoded)
8484
}
8585
"ANOTHER_ROBOBIRD" -> {
8686
val decoded = decoder.json.decodeFromJsonElement(Robobird.serializer(), element)
87-
AnotherAnimal.RobobirdAnotherAnimal(decoded)
87+
AnotherAnimal.AnotherRobobirdWrapper(decoded)
8888
}
8989
else -> throw SerializationException("Unknown AnotherAnimal another_discriminator: $discriminatorValue")
9090
}

0 commit comments

Comments
 (0)