blob: 85a4624b52b8624948f4fabebc4308272edb4baf (
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
30
31
|
/*
* Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.serialization.json.internal
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.internal.ElementMarker
@OptIn(ExperimentalSerializationApi::class)
internal class JsonElementMarker(descriptor: SerialDescriptor) {
private val origin: ElementMarker = ElementMarker(descriptor, ::readIfAbsent)
internal var isUnmarkedNull: Boolean = false
private set
internal fun mark(index: Int) {
origin.mark(index)
}
internal fun nextUnmarkedIndex(): Int {
return origin.nextUnmarkedIndex()
}
private fun readIfAbsent(descriptor: SerialDescriptor, index: Int): Boolean {
isUnmarkedNull = !descriptor.isElementOptional(index) && descriptor.getElementDescriptor(index).isNullable
return isUnmarkedNull
}
}
|