Skip to content

Commit 56267dc

Browse files
committed
use firebase serializers whn encoding composites
1 parent 188a606 commit 56267dc

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
@@ -3,6 +3,7 @@ import org.apache.tools.ant.taskdefs.condition.Os
33
plugins {
44
id("com.android.library")
55
kotlin("multiplatform")
6+
kotlin("plugin.serialization") version "1.3.61"
67
`maven-publish`
78
}
89
repositories {
@@ -67,6 +68,12 @@ kotlin {
6768
}
6869
kotlin.srcDir("src/androidMain/kotlin")
6970
}
71+
val jvmTest by getting {
72+
dependencies {
73+
implementation(kotlin("test-junit"))
74+
}
75+
kotlin.srcDir("src/androidTest/kotlin")
76+
}
7077
}
7178
}
7279

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)