You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/Polymorphic.kt
+2-3Lines changed: 2 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ internal fun <T> FirebaseEncoder.encodePolymorphically(
16
16
value:T,
17
17
ifPolymorphic: (String) ->Unit
18
18
) {
19
-
// If serializer is not an AbstractPolymorphicSerializer or if we are encoding this as a list, we can just use the regular serializer
19
+
// If serializer is not an AbstractPolymorphicSerializer we can just use the regular serializer
20
20
// This will result in calling structureEncoder for complicated structures
21
21
// For PolymorphicKind this will first encode the polymorphic discriminator as a String and the remaining StructureKind.Class as a map of key-value pairs
22
22
// This will result in a list structured like: (type, { classKey = classValue })
@@ -25,7 +25,6 @@ internal fun <T> FirebaseEncoder.encodePolymorphically(
25
25
return
26
26
}
27
27
28
-
// When doing Polymorphic Serialization with EncodeDecodeSettings.PolymorphicStructure.MAP we will use the polymorphic serializer of the class.
29
28
val casted = serializer asAbstractPolymorphicSerializer<Any>
30
29
val baseClassDiscriminator = serializer.descriptor.classDiscriminator()
31
30
val actualSerializer = casted.findPolymorphicSerializer(this, value asAny)
@@ -38,7 +37,7 @@ internal fun <T> FirebaseDecoder.decodeSerializableValuePolymorphic(
38
37
value:Any?,
39
38
deserializer:DeserializationStrategy<T>,
40
39
): T {
41
-
// If deserializer is not an AbstractPolymorphicSerializer or if we are decoding this from a list, we can just use the regular serializer
40
+
// If deserializer is not an AbstractPolymorphicSerializer we can just use the regular serializer
42
41
if (deserializer !isAbstractPolymorphicSerializer<*>) {
Copy file name to clipboardExpand all lines: firebase-common/src/commonTest/kotlin/dev/gitlive/firebase/EncodersTest.kt
+9-2Lines changed: 9 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -58,6 +58,7 @@ data class ImplementedClass(override val value: String, val otherValue: Boolean)
58
58
59
59
@Serializable
60
60
data classNestedClass(
61
+
valtestData:TestData,
61
62
valsealed:SealedClass,
62
63
valabstract:AbstractClass,
63
64
valsealedList:List<SealedClass>,
@@ -185,18 +186,21 @@ class EncodersTest {
185
186
}
186
187
}
187
188
189
+
val testData =TestData(mapOf("key" to "value"), mapOf(1 to 1), true, null, ValueClass(42))
188
190
val sealedClass:SealedClass=SealedClass.Test("value")
189
191
val abstractClass:AbstractClass=ImplementedClass("value", true)
190
-
val nestedClass =NestedClass(sealedClass, abstractClass, listOf(sealedClass), listOf(abstractClass), mapOf(sealedClass to sealedClass), mapOf(abstractClass to abstractClass))
192
+
val nestedClass =NestedClass(testData, sealedClass, abstractClass, listOf(sealedClass), listOf(abstractClass), mapOf(sealedClass to sealedClass), mapOf(abstractClass to abstractClass))
191
193
val encoded = encode(NestedClass.serializer(), nestedClass) {
192
194
encodeDefaults =true
193
195
serializersModule = module
194
196
}
195
197
198
+
val testDataEncoded = nativeMapOf("map" to nativeMapOf("key" to "value"), "otherMap" to nativeMapOf(1 to 1), "bool" to true, "nullableBool" to null, "valueClass" to 42)
196
199
val sealedEncoded = nativeMapOf("type" to "test", "value" to "value")
197
200
val abstractEncoded = nativeMapOf("type" to "implemented", "value" to "value", "otherValue" to true)
198
201
nativeAssertEquals(
199
202
nativeMapOf(
203
+
"testData" to testDataEncoded,
200
204
"sealed" to sealedEncoded,
201
205
"abstract" to abstractEncoded,
202
206
"sealedList" to nativeListOf(sealedEncoded),
@@ -337,9 +341,10 @@ class EncodersTest {
337
341
}
338
342
}
339
343
344
+
val testData =TestData(mapOf("key" to "value"), mapOf(1 to 1), true, null, ValueClass(42))
340
345
val sealedClass:SealedClass=SealedClass.Test("value")
341
346
val abstractClass:AbstractClass=ImplementedClass("value", true)
342
-
val nestedClass =NestedClass(sealedClass, abstractClass, listOf(sealedClass), listOf(abstractClass), mapOf(sealedClass to sealedClass), mapOf(abstractClass to abstractClass))
347
+
val nestedClass =NestedClass(testData, sealedClass, abstractClass, listOf(sealedClass), listOf(abstractClass), mapOf(sealedClass to sealedClass), mapOf(abstractClass to abstractClass))
343
348
val encoded = encode(NestedClass.serializer(), nestedClass) {
344
349
encodeDefaults =true
345
350
serializersModule = module
@@ -353,10 +358,12 @@ class EncodersTest {
353
358
it.copy(sealed =SealedClass.Test("newValue"))
354
359
}
355
360
361
+
val testDataEncoded = nativeMapOf("map" to nativeMapOf("key" to "value"), "otherMap" to nativeMapOf(1 to 1), "bool" to true, "nullableBool" to null, "valueClass" to 42)
356
362
val sealedEncoded = nativeMapOf("type" to "test", "value" to "value")
357
363
val abstractEncoded = nativeMapOf("type" to "implemented", "value" to "value", "otherValue" to true)
358
364
nativeAssertEquals(
359
365
nativeMapOf(
366
+
"testData" to testDataEncoded,
360
367
"sealed" to nativeMapOf("type" to "test", "value" to "newValue"),
0 commit comments