blob: e87a08da5eb55039e6dc23e6c71d8632ffb0b8fb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package kotlinx.serialization.json.internal
import kotlinx.serialization.*
import kotlin.jvm.*
internal enum class WriteMode(@JvmField val begin: Char, @JvmField val end: Char) {
OBJ(BEGIN_OBJ, END_OBJ),
LIST(BEGIN_LIST, END_LIST),
MAP(BEGIN_OBJ, END_OBJ),
POLY_OBJ(BEGIN_LIST, END_LIST);
@JvmField
val beginTc: Byte = charToTokenClass(begin)
@JvmField
val endTc: Byte = charToTokenClass(end)
}
internal fun switchMode(desc: SerialDescriptor, typeParams: Array<out KSerializer<*>>): WriteMode =
when (desc.kind) {
UnionKind.POLYMORPHIC -> WriteMode.POLY_OBJ
StructureKind.LIST -> WriteMode.LIST
StructureKind.MAP -> {
val keyKind = typeParams[0].descriptor.kind
if (keyKind is PrimitiveKind || keyKind == UnionKind.ENUM_KIND)
WriteMode.MAP
else WriteMode.LIST
}
else -> WriteMode.OBJ
}
|