commonTest.kotlinx.serialization.features.SerializableWithTest.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlinx-serialization-json
Show all versions of kotlinx-serialization-json
Kotlin multiplatform serialization runtime library
/*
* Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.serialization.features
import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.json.Json
import kotlin.test.Test
import kotlin.test.assertEquals
object MultiplyingIntSerializer : KSerializer {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("MultiplyingInt", PrimitiveKind.INT)
override fun deserialize(decoder: Decoder): Int {
return decoder.decodeInt() / 2
}
override fun serialize(encoder: Encoder, value: Int) {
encoder.encodeInt(value * 2)
}
}
object DividingIntSerializer : KSerializer {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("DividedInt", PrimitiveKind.INT)
override fun deserialize(decoder: Decoder): Int {
return decoder.decodeInt() * 2
}
override fun serialize(encoder: Encoder, value: Int) {
encoder.encodeInt(value / 2)
}
}
@Serializable(with = DividingIntHolderSerializer::class)
data class IntHolder(val data: Int)
@Serializer(IntHolder::class)
object MultiplyingIntHolderSerializer {
override fun deserialize(decoder: Decoder): IntHolder {
return IntHolder(decoder.decodeInt() / 2)
}
override fun serialize(encoder: Encoder, value: IntHolder) {
encoder.encodeInt(value.data * 2)
}
}
@Serializer(IntHolder::class)
object DividingIntHolderSerializer {
override fun deserialize(decoder: Decoder): IntHolder {
return IntHolder(decoder.decodeInt() * 2)
}
override fun serialize(encoder: Encoder, value: IntHolder) {
encoder.encodeInt(value.data / 2)
}
}
@Serializable
data class Carrier(
@Serializable(with = MultiplyingIntHolderSerializer::class) val a: IntHolder,
@Serializable(with = MultiplyingIntSerializer::class) val i: Int
)
class SerializableWithTest {
@Test
fun testOnProperties() {
val str = Json.encodeToString(Carrier.serializer(), Carrier(IntHolder(42), 2))
assertEquals("""{"a":84,"i":4}""", str)
}
}