Skip to content

Commit acb1641

Browse files
authored
[Kotlin] Introduce support for Kotlin Explicit API Mode for Kotlin-Client generator (resolve #16506) (#19999)
* [Kotlin] Properly document nonPublicApi CLI option * [Kotlin] Respect parameter name of parent KSerializer to avoid miss-behavior * [Kotlin] Introduce support for Kotlin Explicit API Mode for Kotlin-Client generator (resolves #16506)
1 parent e9ea12f commit acb1641

File tree

271 files changed

+5526
-723
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

271 files changed

+5526
-723
lines changed

.github/workflows/samples-kotlin-client.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020
sample:
2121
# client
2222
- samples/client/petstore/kotlin
23+
- samples/client/petstore/kotlin-explicit
2324
- samples/client/petstore/kotlin-gson
2425
- samples/client/petstore/kotlin-jackson
2526
- samples/client/petstore/kotlin-model-prefix-type-mappings

bin/configs/kotlin-explicit.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
generatorName: kotlin
2+
outputDir: samples/client/petstore/kotlin-explicit
3+
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml
4+
templateDir: modules/openapi-generator/src/main/resources/kotlin-client
5+
additionalProperties:
6+
artifactId: kotlin-petstore-explicit
7+
explicitApi: "true"

docs/generators/kotlin.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2525
|collectionType|Option. Collection type to use|<dl><dt>**array**</dt><dd>kotlin.Array</dd><dt>**list**</dt><dd>kotlin.collections.List</dd></dl>|list|
2626
|dateLibrary|Option. Date library to use|<dl><dt>**threetenbp-localdatetime**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, for legacy app only)</dd><dt>**kotlinx-datetime**</dt><dd>kotlinx-datetime (preferred for multiplatform)</dd><dt>**string**</dt><dd>String</dd><dt>**java8-localdatetime**</dt><dd>Java 8 native JSR310 (jvm only, for legacy app only)</dd><dt>**java8**</dt><dd>Java 8 native JSR310 (jvm only, preferred for jdk 1.8+)</dd><dt>**threetenbp**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, preferred for jdk &lt; 1.8)</dd></dl>|java8|
2727
|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original|
28+
|explicitApi|Generates code with explicit access modifiers to comply with Kotlin Explicit API Mode.| |false|
2829
|failOnUnknownProperties|Fail Jackson de-serialization on unknown properties| |false|
2930
|generateOneOfAnyOfWrappers|Generate oneOf, anyOf schemas as wrappers.| |false|
3031
|generateRoomModels|Generate Android Room database models in addition to API models (JVM Volley library only)| |false|
@@ -34,6 +35,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
3435
|mapFileBinaryToByteArray|Map File and Binary to ByteArray (default: false)| |false|
3536
|modelMutable|Create mutable models| |false|
3637
|moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false|
38+
|nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.| |false|
3739
|nullableReturnType|Nullable return type| |false|
3840
|omitGradlePluginVersions|Whether to declare Gradle plugin versions in build files.| |false|
3941
|omitGradleWrapper|Whether to omit Gradle wrapper for creating a sub project.| |false|

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
9090

9191
public static final String MOSHI_CODE_GEN = "moshiCodeGen";
9292

93+
public static final String EXPLICIT_API = "explicitApi";
9394
public static final String NULLABLE_RETURN_TYPE = "nullableReturnType";
9495

9596
public static final String SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW = "supportAndroidApiLevel25AndBelow";
@@ -268,6 +269,8 @@ public KotlinClientCodegen() {
268269
cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info."));
269270
cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", false));
270271

272+
cliOptions.add(CliOption.newBoolean(EXPLICIT_API, "Generates code with explicit access modifiers to comply with Kotlin Explicit API Mode."));
273+
cliOptions.add(CliOption.newBoolean(CodegenConstants.NON_PUBLIC_API, CodegenConstants.NON_PUBLIC_API_DESC));
271274
cliOptions.add(CliOption.newBoolean(NULLABLE_RETURN_TYPE, "Nullable return type"));
272275

273276
cliOptions.add(CliOption.newBoolean(GENERATE_ROOM_MODELS, "Generate Android Room database models in addition to API models (JVM Volley library only)", false));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import java.io.IOException
7171
@Deprecated(message = "This schema is deprecated.")
7272
{{/isDeprecated}}
7373
{{>additionalModelTypeAnnotations}}
74-
{{#nonPublicApi}}internal {{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) {
74+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) {
7575
7676
class CustomTypeAdapterFactory : TypeAdapterFactory {
7777
override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ idea {
9999
}
100100
}
101101
{{/idea}}
102+
{{#explicitApi}}
103+
kotlin {
104+
explicitApi()
105+
}
106+
{{/explicitApi}}
102107
{{#jvm-spring-webclient}}{{#useSpringBoot3}}
103108
kotlin {
104109
jvmToolchain {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
7777
{{#vendorExtensions.x-class-extra-annotation}}
7878
{{{vendorExtensions.x-class-extra-annotation}}}
7979
{{/vendorExtensions.x-class-extra-annotation}}
80-
{{#nonPublicApi}}internal {{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}{{#hasVars}}data {{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} (
80+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}{{#hasVars}}data {{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} (
8181

8282
{{#allVars}}
8383
{{#required}}{{>data_class_req_var}}{{/required}}{{^required}}{{>data_class_opt_var}}{{/required}}{{^-last}},{{/-last}}
@@ -94,7 +94,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
9494
){{/discriminator}}
9595
{{/generateRoomModels}}
9696
{{#serializableModel}}
97-
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object {
97+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
9898
private const val serialVersionUID: Long = 123
9999
}
100100
{{/serializableModel}}
@@ -120,7 +120,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
120120
{{#multiplatform}}
121121
@Serializable
122122
{{/multiplatform}}
123-
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInPascalCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
123+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
124124
{{#allowableValues}}
125125
{{#enumVars}}
126126
{{^multiplatform}}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import kotlinx.serialization.*
3939
@JsonClass(generateAdapter = false)
4040
{{/moshi}}
4141
{{/multiplatform}}
42-
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) {
42+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{classname}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{{dataType}}}) {
4343
{{#allowableValues}}{{#enumVars}}
4444
{{^multiplatform}}
4545
{{#moshi}}
@@ -79,16 +79,16 @@ import kotlinx.serialization.*
7979
*/
8080
override fun toString(): kotlin.String = value{{^isString}}.toString(){{/isString}}
8181

82-
companion object {
82+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
8383
/**
8484
* Converts the provided [data] to a [String] on success, null otherwise.
8585
*/
86-
fun encode(data: kotlin.Any?): kotlin.String? = if (data is {{classname}}) "$data" else null
86+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun encode(data: kotlin.Any?): kotlin.String? = if (data is {{classname}}) "$data" else null
8787

8888
/**
8989
* Returns a valid [{{classname}}] for [data], null otherwise.
9090
*/
91-
fun decode(data: kotlin.Any?): {{classname}}? = data?.let {
91+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun decode(data: kotlin.Any?): {{classname}}? = data?.let {
9292
val normalizedData = "$it".lowercase()
9393
values().firstOrNull { value ->
9494
it == value || normalizedData == "$value".lowercase()

modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/ApiAbstractions.kt.mustache

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package {{packageName}}.infrastructure
22

3-
{{#nonPublicApi}}internal {{/nonPublicApi}}typealias MultiValueMap = MutableMap<String,List<String>>
3+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}typealias MultiValueMap = MutableMap<String,List<String>>
44

5-
{{#nonPublicApi}}internal {{/nonPublicApi}}fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) {
5+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun collectionDelimiter(collectionFormat: String): String = when(collectionFormat) {
66
"csv" -> ","
77
"tsv" -> "\t"
88
"pipe" -> "|"
99
"space" -> " "
1010
else -> ""
1111
}
1212

13-
{{#nonPublicApi}}internal {{/nonPublicApi}}val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" }
13+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" }
1414

15-
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter)
15+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String>
1616
= toMultiValue(items.asIterable(), collectionFormat, map)
1717

18-
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Iterable<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String> {
18+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Iterable<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String> {
1919
return when(collectionFormat) {
2020
"multi" -> items.map(map)
2121
else -> listOf(items.joinToString(separator = collectionDelimiter(collectionFormat), transform = map))

modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/PartConfig.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package {{packageName}}.infrastructure
55
* NOTE: Headers is a Map<String,String> because rfc2616 defines
66
* multi-valued headers as csv-only.
77
*/
8-
{{#nonPublicApi}}internal {{/nonPublicApi}}data class PartConfig<T>(
8+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class PartConfig<T>(
99
val headers: MutableMap<String, String> = mutableMapOf(),
1010
val body: T? = null
1111
)

modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package {{packageName}}.infrastructure
88
* NOTE: Headers is a Map<String,String> because rfc2616 defines
99
* multi-valued headers as csv-only.
1010
*/
11-
{{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig<T>(
11+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),

modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestMethod.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ package {{packageName}}.infrastructure
33
/**
44
* Provides enumerated HTTP verbs
55
*/
6-
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class RequestMethod {
6+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class RequestMethod {
77
GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT
88
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/AtomicBooleanAdapter.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
1010
import java.util.concurrent.atomic.AtomicBoolean
1111

1212
@Serializer(forClass = AtomicBoolean::class)
13-
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicBooleanAdapter : KSerializer<AtomicBoolean> {
13+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicBooleanAdapter : KSerializer<AtomicBoolean> {
1414
override fun serialize(encoder: Encoder, value: AtomicBoolean) {
1515
encoder.encodeBoolean(value.get())
1616
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/AtomicIntegerAdapter.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
1010
import java.util.concurrent.atomic.AtomicInteger
1111

1212
@Serializer(forClass = AtomicInteger::class)
13-
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicIntegerAdapter : KSerializer<AtomicInteger> {
13+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicIntegerAdapter : KSerializer<AtomicInteger> {
1414
override fun serialize(encoder: Encoder, value: AtomicInteger) {
1515
encoder.encodeInt(value.get())
1616
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/AtomicLongAdapter.kt.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
1010
import java.util.concurrent.atomic.AtomicLong
1111

1212
@Serializer(forClass = AtomicLong::class)
13-
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicLongAdapter : KSerializer<AtomicLong> {
13+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicLongAdapter : KSerializer<AtomicLong> {
1414
override fun serialize(encoder: Encoder, value: AtomicLong) {
1515
encoder.encodeLong(value.get())
1616
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigDecimalAdapter.kt.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ import java.math.BigDecimal
1717

1818
{{#kotlinx_serialization}}
1919
@Serializer(forClass = BigDecimal::class)
20-
{{#nonPublicApi}}internal {{/nonPublicApi}}object BigDecimalAdapter : KSerializer<BigDecimal> {
20+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object BigDecimalAdapter : KSerializer<BigDecimal> {
2121
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
2222
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString())
2323
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString())
2424
}
2525
{{/kotlinx_serialization}}
2626
{{#moshi}}
27-
{{#nonPublicApi}}internal {{/nonPublicApi}}class BigDecimalAdapter {
27+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class BigDecimalAdapter {
2828
@ToJson
29-
fun toJson(value: BigDecimal): String {
29+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: BigDecimal): String {
3030
return value.toPlainString()
3131
}
3232

3333
@FromJson
34-
fun fromJson(value: String): BigDecimal {
34+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): BigDecimal {
3535
return BigDecimal(value)
3636
}
3737
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigIntegerAdapter.kt.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import java.math.BigInteger
1717

1818
{{#kotlinx_serialization}}
1919
@Serializer(forClass = BigInteger::class)
20-
{{#nonPublicApi}}internal {{/nonPublicApi}}object BigIntegerAdapter : KSerializer<BigInteger> {
20+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object BigIntegerAdapter : KSerializer<BigInteger> {
2121
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING)
2222
override fun deserialize(decoder: Decoder): BigInteger {
2323
return BigInteger(decoder.decodeString())
@@ -29,14 +29,14 @@ import java.math.BigInteger
2929
}
3030
{{/kotlinx_serialization}}
3131
{{#moshi}}
32-
{{#nonPublicApi}}internal {{/nonPublicApi}}class BigIntegerAdapter {
32+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class BigIntegerAdapter {
3333
@ToJson
34-
fun toJson(value: BigInteger): String {
34+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: BigInteger): String {
3535
return value.toString()
3636
}
3737

3838
@FromJson
39-
fun fromJson(value: String): BigInteger {
39+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): BigInteger {
4040
return BigInteger(value)
4141
}
4242
}

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/ByteArrayAdapter.kt.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ import java.io.IOException
1313
{{/gson}}
1414

1515
{{#moshi}}
16-
{{#nonPublicApi}}internal {{/nonPublicApi}}class ByteArrayAdapter {
16+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ByteArrayAdapter {
1717
@ToJson
18-
fun toJson(data: ByteArray): String = String(data)
18+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(data: ByteArray): String = String(data)
1919

2020
@FromJson
21-
fun fromJson(data: String): ByteArray = data.toByteArray()
21+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(data: String): ByteArray = data.toByteArray()
2222
}
2323
{{/moshi}}
2424
{{#gson}}
25-
{{#nonPublicApi}}internal {{/nonPublicApi}}class ByteArrayAdapter : TypeAdapter<ByteArray>() {
25+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ByteArrayAdapter : TypeAdapter<ByteArray>() {
2626
@Throws(IOException::class)
2727
override fun write(out: JsonWriter?, value: ByteArray?) {
2828
if (value == null) {

modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/InstantAdapter.kt.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@ import java.io.IOException
1414
import kotlinx.datetime.Instant
1515

1616
{{#moshi}}
17-
{{#nonPublicApi}}internal {{/nonPublicApi}}class InstantAdapter {
17+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class InstantAdapter {
1818
@ToJson
19-
fun toJson(value: Instant): String {
19+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: Instant): String {
2020
return value.toString()
2121
}
2222

2323
@FromJson
24-
fun fromJson(value: String): Instant {
24+
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): Instant {
2525
return Instant.parse(value)
2626
}
2727

2828
}
2929
{{/moshi}}
3030
{{#gson}}
31-
{{#nonPublicApi}}internal {{/nonPublicApi}}class InstantAdapter : TypeAdapter<Instant>() {
31+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class InstantAdapter : TypeAdapter<Instant>() {
3232
@Throws(IOException::class)
3333
override fun write(out: JsonWriter?, value: Instant?) {
3434
if (value == null) {

0 commit comments

Comments
 (0)