|
1 | 1 | package dev.teamhub.firebase
|
2 | 2 |
|
3 | 3 | import kotlinx.serialization.*
|
| 4 | +import kotlinx.serialization.internal.ListLikeSerializer |
| 5 | +import kotlinx.serialization.internal.MapLikeSerializer |
4 | 6 | import kotlinx.serialization.modules.EmptyModule
|
5 | 7 |
|
6 | 8 | fun <T> encode(strategy: SerializationStrategy<T> , value: T, positiveInfinity: Any = Double.POSITIVE_INFINITY): Any? =
|
@@ -94,11 +96,17 @@ open class FirebaseCompositeEncoder(
|
94 | 96 | super.endStructure(desc)
|
95 | 97 | }
|
96 | 98 |
|
| 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 | + |
97 | 105 | 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 }) |
99 | 107 |
|
100 | 108 | 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) |
102 | 110 |
|
103 | 111 | override fun encodeNonSerializableElement(desc: SerialDescriptor, index: Int, value: Any) = set(desc, index, value)
|
104 | 112 |
|
|
0 commit comments