Skip to content

Commit 2811137

Browse files
committed
fixes android & ios decoders
1 parent 53ce257 commit 2811137

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

firebase-common/src/androidMain/kotlin/dev/gitlive/firebase/_decoders.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@ import kotlinx.serialization.descriptors.StructureKind
1111

1212
actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor): CompositeDecoder = when(descriptor.kind) {
1313
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> (value as Map<*, *>).let { map ->
14-
FirebaseClassDecoder(map.size, { map.containsKey(it) }) { desc, index -> map[desc.getElementName(index)] }
14+
FirebaseClassDecoder(map.size, { map.containsKey(it) }) { desc, index ->
15+
val elementName = desc.getElementName(index)
16+
if (desc.kind is PolymorphicKind && elementName == "value") {
17+
map
18+
} else {
19+
map[desc.getElementName(index)]
20+
}
21+
}
1522
}
1623
StructureKind.LIST -> (value as List<*>).let {
1724
FirebaseCompositeDecoder(it.size) { _, index -> it[index] }

firebase-common/src/iosMain/kotlin/dev/gitlive/firebase/_decoders.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@ import kotlinx.serialization.descriptors.StructureKind
1111

1212
actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor): CompositeDecoder = when(descriptor.kind) {
1313
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> (value as Map<*, *>).let { map ->
14-
FirebaseClassDecoder(map.size, { map.containsKey(it) }) { desc, index -> map[desc.getElementName(index)] }
14+
FirebaseClassDecoder(map.size, { map.containsKey(it) }) { desc, index ->
15+
val elementName = desc.getElementName(index)
16+
if (desc.kind is PolymorphicKind && elementName == "value") {
17+
map
18+
} else {
19+
map[desc.getElementName(index)]
20+
}
21+
}
1522
}
1623
StructureKind.LIST -> (value as List<*>).let {
1724
FirebaseCompositeDecoder(it.size) { _, index -> it[index] }

0 commit comments

Comments
 (0)