Skip to content

Commit 37bf8ca

Browse files
committed
Added on iOS and js
1 parent 6a08e16 commit 37bf8ca

File tree

5 files changed

+11
-8
lines changed

5 files changed

+11
-8
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
package dev.gitlive.firebase
66

7-
import kotlinx.serialization.KSerializer
87
import kotlinx.serialization.descriptors.PolymorphicKind
98
import kotlinx.serialization.encoding.CompositeEncoder
109
import kotlinx.serialization.descriptors.SerialDescriptor

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ package dev.gitlive.firebase
77
import kotlinx.serialization.encoding.CompositeDecoder
88
import kotlinx.serialization.KSerializer
99
import kotlinx.serialization.SerializationException
10+
import kotlinx.serialization.descriptors.PolymorphicKind
1011
import kotlinx.serialization.descriptors.SerialDescriptor
1112
import kotlinx.serialization.descriptors.StructureKind
1213

13-
actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, decodeDouble: (value: Any?) -> Double?): CompositeDecoder = when(descriptor.kind as StructureKind) {
14-
StructureKind.CLASS, StructureKind.OBJECT -> (value as Map<*, *>).let { map ->
14+
actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, decodeDouble: (value: Any?) -> Double?): CompositeDecoder = when(descriptor.kind) {
15+
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> (value as Map<*, *>).let { map ->
1516
FirebaseClassDecoder(decodeDouble, map.size, { map.containsKey(it) }) { desc, index -> map[desc.getElementName(index)] }
1617
}
1718
StructureKind.LIST -> (value as List<*>).let {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@
44

55
package dev.gitlive.firebase
66

7+
import kotlinx.serialization.descriptors.PolymorphicKind
78
import kotlinx.serialization.encoding.CompositeEncoder
89
import kotlinx.serialization.descriptors.SerialDescriptor
910
import kotlinx.serialization.descriptors.StructureKind
1011
import kotlin.collections.set
1112

12-
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): CompositeEncoder = when(descriptor.kind as StructureKind) {
13+
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): CompositeEncoder = when(descriptor.kind) {
1314
StructureKind.LIST -> mutableListOf<Any?>()
1415
.also { value = it }
1516
.let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it.add(index, value) } }
1617
StructureKind.MAP -> mutableListOf<Any?>()
1718
.let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity, { value = it.chunked(2).associate { (k, v) -> k to v } }) { _, _, value -> it.add(value) } }
18-
StructureKind.CLASS, StructureKind.OBJECT -> mutableMapOf<Any?, Any?>()
19+
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> mutableMapOf<Any?, Any?>()
1920
.also { value = it }
2021
.let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it[descriptor.getElementName(index)] = value } }
2122
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ package dev.gitlive.firebase
77
import kotlinx.serialization.encoding.CompositeDecoder
88
import kotlinx.serialization.KSerializer
99
import kotlinx.serialization.SerializationException
10+
import kotlinx.serialization.descriptors.PolymorphicKind
1011
import kotlinx.serialization.descriptors.SerialDescriptor
1112
import kotlinx.serialization.descriptors.StructureKind
1213
import kotlin.js.Json
1314

1415
@Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE")
1516
actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, decodeDouble: (value: Any?) -> Double?): CompositeDecoder = when(descriptor.kind as StructureKind) {
16-
StructureKind.CLASS, StructureKind.OBJECT -> (value as Json).let { json ->
17+
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> (value as Json).let { json ->
1718
FirebaseClassDecoder(decodeDouble, js("Object").keys(value).length as Int, { json[it] != undefined }) {
1819
desc, index -> json[desc.getElementName(index)]
1920
}

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/_encoders.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
package dev.gitlive.firebase
66

7+
import kotlinx.serialization.descriptors.PolymorphicKind
78
import kotlinx.serialization.encoding.CompositeEncoder
89
import kotlinx.serialization.descriptors.SerialDescriptor
910
import kotlinx.serialization.descriptors.StructureKind
1011
import kotlin.js.json
1112

12-
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): CompositeEncoder = when(descriptor.kind as StructureKind) {
13+
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): CompositeEncoder = when(descriptor.kind) {
1314
StructureKind.LIST -> Array<Any?>(descriptor.elementsCount) { null }
1415
.also { value = it }
1516
.let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it[index] = value } }
@@ -19,7 +20,7 @@ actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): Compo
1920
value = map
2021
FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> if(index % 2 == 0) lastKey = value as String else map[lastKey] = value }
2122
}
22-
StructureKind.CLASS, StructureKind.OBJECT -> json()
23+
StructureKind.CLASS, StructureKind.OBJECT, PolymorphicKind.SEALED -> json()
2324
.also { value = it }
2425
.let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it[descriptor.getElementName(index)] = value } }
2526
}

0 commit comments

Comments
 (0)