Skip to content

Commit 8735a09

Browse files
committed
support encoding sets by making list serializer support iterables
1 parent a2e692f commit 8735a09

File tree

1 file changed

+6
-5
lines changed
  • firebase-common/src/commonMain/kotlin/dev/teamhub/firebase

1 file changed

+6
-5
lines changed

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import kotlinx.serialization.internal.nullable
99
fun Any.firebaseSerializer() = (this::class.compiledSerializer() ?: this::class.defaultSerializer() ?: when(this) {
1010
is Map<*, *> -> FirebaseMapSerializer()
1111
is List<*> -> FirebaseListSerializer()
12+
is Set<*> -> FirebaseListSerializer()
1213
else -> throw SerializationException("Can't locate argument-less serializer for $this. For generic classes, such as lists, please provide serializer explicitly.")
1314
}) as KSerializer<Any>
1415

@@ -49,7 +50,7 @@ class FirebaseMapSerializer : KSerializer<Map<String, Any?>> {
4950
}
5051
}
5152

52-
class FirebaseListSerializer : KSerializer<List<Any?>> {
53+
class FirebaseListSerializer : KSerializer<Iterable<Any?>> {
5354

5455
lateinit var list: List<Any?>
5556

@@ -62,11 +63,11 @@ class FirebaseListSerializer : KSerializer<List<Any?>> {
6263
}
6364

6465
@Suppress("UNCHECKED_CAST")
65-
override fun serialize(encoder: Encoder, obj: List<Any?>) {
66-
list = obj
67-
val collectionEncoder = encoder.beginCollection(descriptor, obj.size)
66+
override fun serialize(encoder: Encoder, obj: Iterable<Any?>) {
67+
list = obj.toList()
68+
val collectionEncoder = encoder.beginCollection(descriptor, list.size)
6869
list.forEachIndexed { index, value ->
69-
val serializer = value?.let { it::class.firebaseSerializer() } ?: UnitSerializer.nullable as KSerializer<Any>
70+
val serializer = value?.firebaseSerializer() ?: UnitSerializer.nullable as KSerializer<Any>
7071
collectionEncoder.encodeNullableSerializableElement(
7172
serializer.descriptor, index, serializer, value
7273
)

0 commit comments

Comments
 (0)