blob: 30c8c23ab5769f026f20a1ee2f84de43cc8924c9 [file]
// WITH_STDLIB
import kotlinx.serialization.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.json.*
class AnyMapSerializer: KSerializer<Map<String, Any?>> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("AnyMap", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Map<String, Any?>) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Map<String, Any?> {
return emptyMap()
}
}
class AnyListSerializer: KSerializer<List<Any?>> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("AnyList", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: List<Any?>) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): List<Any?> {
return emptyList()
}
}
class NonSerializable
class Box<T>
class BoxSerializerArgless(): KSerializer<Box<Any>> {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("BoxSerializerArgless", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Box<Any>) = TODO()
override fun deserialize(decoder: Decoder): Box<Any> = TODO()
}
@Serializable
data class Test(
@Serializable(with = AnyMapSerializer::class)
var map: Map<String, Any>?,
@Serializable(with = AnyListSerializer::class)
val testList: List<Any?>,
@Serializable(with = BoxSerializerArgless::class)
val box: Box<NonSerializable>
)
fun box(): String {
val desc = Test.serializer().descriptor
if (desc.getElementDescriptor(0).serialName != "AnyMap?") return "Fail MAP"
if (desc.getElementDescriptor(1).serialName != "AnyList") return "Fail LIST"
if (desc.getElementDescriptor(2).serialName != "BoxSerializerArgless") return "Fail BOX"
return "OK"
}