Skip to content

Commit 7f332fb

Browse files
authored
Merge branch 'master' into ios-support
2 parents 28d712e + 68d38cc commit 7f332fb

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

firebase-common/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44
id("com.android.library")
55
kotlin("multiplatform")
66
kotlin("native.cocoapods")
7+
kotlin("plugin.serialization") version "1.3.61"
78
`maven-publish`
89
}
910
repositories {
@@ -80,6 +81,12 @@ kotlin {
8081
}
8182
kotlin.srcDir("src/androidMain/kotlin")
8283
}
84+
val jvmTest by getting {
85+
dependencies {
86+
implementation(kotlin("test-junit"))
87+
}
88+
kotlin.srcDir("src/androidTest/kotlin")
89+
}
8390
val iosMain by creating {
8491
dependencies {
8592
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.14.0")

firebase-common/src/commonMain/kotlin/dev/teamhub/firebase/encoders.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package dev.teamhub.firebase
22

33
import kotlinx.serialization.*
4+
import kotlinx.serialization.internal.ListLikeSerializer
5+
import kotlinx.serialization.internal.MapLikeSerializer
46
import kotlinx.serialization.modules.EmptyModule
57

68
fun <T> encode(strategy: SerializationStrategy<T> , value: T, positiveInfinity: Any = Double.POSITIVE_INFINITY): Any? =
@@ -94,11 +96,17 @@ open class FirebaseCompositeEncoder(
9496
super.endStructure(desc)
9597
}
9698

99+
private fun <T> SerializationStrategy<T>.toFirebase(): SerializationStrategy<T> = when(this) {
100+
is MapLikeSerializer<*, *, *, *> -> FirebaseMapSerializer() as SerializationStrategy<T>
101+
is ListLikeSerializer<*, *, *> -> FirebaseListSerializer() as SerializationStrategy<T>
102+
else -> this
103+
}
104+
97105
override fun <T : Any> encodeNullableSerializableElement(desc: SerialDescriptor, index: Int, serializer: SerializationStrategy<T>, value: T?) =
98-
set(desc, index, value?.let { FirebaseEncoder(positiveInfinity).apply { encode(serializer, value) }.value })
106+
set(desc, index, value?.let { FirebaseEncoder(positiveInfinity).apply { encode(serializer.toFirebase(), value) }.value })
99107

100108
override fun <T> encodeSerializableElement(desc: SerialDescriptor, index: Int, serializer: SerializationStrategy<T>, value: T) =
101-
set(desc, index, FirebaseEncoder(positiveInfinity).apply { encode(serializer, value) }.value)
109+
set(desc, index, FirebaseEncoder(positiveInfinity).apply { encode(serializer.toFirebase(), value) }.value)
102110

103111
override fun encodeNonSerializableElement(desc: SerialDescriptor, index: Int, value: Any) = set(desc, index, value)
104112

0 commit comments

Comments
 (0)