Skip to content

Commit 5ae2040

Browse files
authored
#911 kotlinx.serialization DocumentDecoder List element index fix (#913)
1 parent 338ab69 commit 5ae2040

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

potassium-nitrite/src/main/kotlin/org/dizitart/kno2/serialization/DocumentDecoder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,14 @@ internal class DocumentDecoder(private val document: Document, descriptor: Seria
119119
@OptIn(ExperimentalSerializationApi::class)
120120
private class ListDecoder(private val list: ArrayDeque<Any>) : AbstractDecoder() {
121121
private var elementIndex = 0
122+
private val initialSize = list.size
122123

123124
override val serializersModule: SerializersModule = EmptySerializersModule()
124125

125126
override fun decodeValue(): Any = list.removeFirst()
126127

127128
override fun decodeElementIndex(descriptor: SerialDescriptor): Int {
128-
if (list.isEmpty() || elementIndex == descriptor.elementsCount) return CompositeDecoder.DECODE_DONE
129+
if (list.isEmpty() || elementIndex == initialSize) return CompositeDecoder.DECODE_DONE
129130
return elementIndex++
130131
}
131132

potassium-nitrite/src/test/kotlin/org/dizitart/kno2/KotlinXSerializationMapperTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,20 @@ class KotlinXSerializationMapperTest {
124124
emptyList(),
125125
emptyArray(),
126126
),
127+
TestData(
128+
TestData.SomePolymorphType.SomeTypeB("someValue"),
129+
emptyMap(),
130+
emptyMap(),
131+
TestData.InnerObject(""),
132+
"",
133+
TestData.SomeValueClass("someString"),
134+
1,
135+
1.0,
136+
"test",
137+
TestData.SomeEnum.SomeValue,
138+
emptyList(),
139+
emptyArray(),
140+
),
127141
),
128142
valueClass = TestData.SomeValueClass("someString"),
129143
someArray = arrayOf("someArrayData"),

0 commit comments

Comments
 (0)