summaryrefslogtreecommitdiff
path: root/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/internal/Tuples.kt')
-rw-r--r--core/commonMain/src/kotlinx/serialization/internal/Tuples.kt21
1 files changed, 9 insertions, 12 deletions
diff --git a/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt b/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt
index 1d30047e..1bd21cbe 100644
--- a/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt
+++ b/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt
@@ -11,7 +11,6 @@ import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import kotlin.native.concurrent.*
-@SharedImmutable
private val NULL = Any()
private const val deprecationMessage =
"This class is used only by the plugin in generated code and should not be used directly. Use corresponding factory functions instead"
@@ -33,35 +32,33 @@ internal sealed class KeyValueSerializer<K, V, R>(
structuredEncoder.endStructure(descriptor)
}
- override fun deserialize(decoder: Decoder): R {
- val composite = decoder.beginStructure(descriptor)
- if (composite.decodeSequentially()) {
- val key = composite.decodeSerializableElement(descriptor, 0, keySerializer)
- val value = composite.decodeSerializableElement(descriptor, 1, valueSerializer)
- return toResult(key, value)
+ override fun deserialize(decoder: Decoder): R = decoder.decodeStructure(descriptor) {
+ if (decodeSequentially()) {
+ val key = decodeSerializableElement(descriptor, 0, keySerializer)
+ val value = decodeSerializableElement(descriptor, 1, valueSerializer)
+ return@decodeStructure toResult(key, value)
}
var key: Any? = NULL
var value: Any? = NULL
mainLoop@ while (true) {
- when (val idx = composite.decodeElementIndex(descriptor)) {
+ when (val idx = decodeElementIndex(descriptor)) {
CompositeDecoder.DECODE_DONE -> {
break@mainLoop
}
0 -> {
- key = composite.decodeSerializableElement(descriptor, 0, keySerializer)
+ key = decodeSerializableElement(descriptor, 0, keySerializer)
}
1 -> {
- value = composite.decodeSerializableElement(descriptor, 1, valueSerializer)
+ value = decodeSerializableElement(descriptor, 1, valueSerializer)
}
else -> throw SerializationException("Invalid index: $idx")
}
}
- composite.endStructure(descriptor)
if (key === NULL) throw SerializationException("Element 'key' is missing")
if (value === NULL) throw SerializationException("Element 'value' is missing")
@Suppress("UNCHECKED_CAST")
- return toResult(key as K, value as V)
+ return@decodeStructure toResult(key as K, value as V)
}
}