summaryrefslogtreecommitdiff
path: root/runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt')
-rw-r--r--runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt77
1 files changed, 77 insertions, 0 deletions
diff --git a/runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt b/runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt
new file mode 100644
index 00000000..d9b69b9f
--- /dev/null
+++ b/runtime/commonMain/src/kotlinx/serialization/modules/StandardSubtypesOfAny.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.modules
+
+import kotlinx.serialization.*
+import kotlinx.serialization.internal.*
+import kotlin.reflect.KClass
+
+internal object StandardSubtypesOfAny {
+ private val map: Map<KClass<*>, KSerializer<*>> = mapOf(
+ List::class to ArrayListSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ )
+ ),
+ LinkedHashSet::class to LinkedHashSetSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ )
+ ),
+ HashSet::class to HashSetSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ )
+ ),
+ Set::class to LinkedHashSetSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ )
+ ),
+ LinkedHashMap::class to LinkedHashMapSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ ), makeNullable(PolymorphicSerializer(Any::class))
+ ),
+ HashMap::class to HashMapSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ ), makeNullable(PolymorphicSerializer(Any::class))
+ ),
+ Map::class to LinkedHashMapSerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ ), makeNullable(PolymorphicSerializer(Any::class))
+ ),
+ Map.Entry::class to MapEntrySerializer(
+ makeNullable(
+ PolymorphicSerializer(Any::class)
+ ), makeNullable(PolymorphicSerializer(Any::class))
+ ),
+ String::class to StringSerializer,
+ Char::class to CharSerializer,
+ Double::class to DoubleSerializer,
+ Float::class to FloatSerializer,
+ Long::class to LongSerializer,
+ Int::class to IntSerializer,
+ Short::class to ShortSerializer,
+ Byte::class to ByteSerializer,
+ Boolean::class to BooleanSerializer,
+ Unit::class to UnitSerializer
+ )
+
+ private val deserializingMap: Map<String, KSerializer<*>> = map.mapKeys { (_, s) -> s.descriptor.name }
+
+ @Suppress("UNCHECKED_CAST")
+ internal fun getSubclassSerializer(objectToCheck: Any): KSerializer<*>? {
+ for ((k, v) in map) {
+ if (objectToCheck.isInstanceOf(k)) return v
+ }
+ return null
+ }
+
+ internal fun getDefaultDeserializer(serializedClassName: String): KSerializer<*>? =
+ deserializingMap[serializedClassName]
+}