blob: 0b9583011d7db3a6c6b4991bc3fd05b162c24702 [file]
// CURIOUS_ABOUT: serializer, generatedSerializer, generatedSerializer$main
// WITH_STDLIB
// FILE: annotation.kt
package kotlinx.serialization
import kotlin.annotation.*
/*
Until the annotation is added to the serialization runtime,
we have to create an annotation with that name in the project itself
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class KeepGeneratedSerializer
// FILE: main.kt
@file:Suppress("OPTIONAL_DECLARATION_USAGE_IN_NON_COMMON_SOURCE") // TODO: support common sources in the test infrastructure
import kotlin.jvm.*
import kotlin.test.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.descriptors.*
// == final class ==
@Serializable(with = DataSerializer::class)
@KeepGeneratedSerializer
data class Data(val i: Int)
object DataSerializer: KSerializer<Data> {
override val descriptor = PrimitiveSerialDescriptor("DataSerializer", PrimitiveKind.INT)
override fun deserialize(decoder: Decoder): Data {
val value = decoder.decodeInt()
return Data(value)
}
override fun serialize(encoder: Encoder, value: Data) {
encoder.encodeInt(value.i)
}
}