Skip to content

Commit a371444

Browse files
committed
EncodedObject as interface
1 parent 5dc2e4b commit a371444

File tree

4 files changed

+28
-11
lines changed

4 files changed

+28
-11
lines changed

firebase-common/src/androidMain/kotlin/dev/gitlive/firebase/_encoders.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ import kotlinx.serialization.descriptors.StructureKind
1010
import java.lang.IllegalArgumentException
1111
import kotlin.collections.set
1212

13-
actual data class EncodedObject internal constructor(actual val raw: Map<String, Any?>) : Map<String, Any?> by raw
13+
actual interface EncodedObject : Map<String, Any?> {
14+
actual val raw: Map<String, Any?>
15+
}
16+
17+
@PublishedApi
18+
internal data class EncodedObjectImpl internal constructor(override val raw: Map<String, Any?>) : EncodedObject, Map<String, Any?> by raw
1419

1520
@PublishedApi
16-
internal actual fun List<Pair<String, Any?>>.asEncodedObject() = EncodedObject(toMap())
21+
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = EncodedObjectImpl(this)
1722

1823
@PublishedApi
1924
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import kotlinx.serialization.modules.SerializersModule
1717
*
1818
* Created using [encodeAsObject]. It is not recommended to encode to this manually.
1919
*/
20-
expect class EncodedObject {
20+
expect interface EncodedObject {
2121
val raw: Map<String, Any?>
2222
}
2323

@@ -91,10 +91,10 @@ internal fun Map<*, *>.asEncodedObject(): EncodedObject = map { (key, value) ->
9191
} else {
9292
throw IllegalArgumentException("Expected a String key but received $key")
9393
}
94-
}.asEncodedObject()
94+
}.toMap().asEncodedObject()
9595

9696
@PublishedApi
97-
internal expect fun List<Pair<String, Any?>>.asEncodedObject(): EncodedObject
97+
internal expect fun Map<String, Any?>.asEncodedObject(): EncodedObject
9898

9999
/**
100100
* An extension which which serializer to use for value. Handy in updating fields by name or path

firebase-common/src/iosMain/kotlin/dev/gitlive/firebase/_encoders.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,17 @@ import kotlinx.serialization.descriptors.SerialDescriptor
99
import kotlinx.serialization.descriptors.StructureKind
1010
import kotlin.collections.set
1111

12-
actual data class EncodedObject internal constructor(actual val raw: Map<String, Any?>) : Map<Any?, Any?> by raw.mapKeys({ (key, _) -> key as? Any })
12+
actual interface EncodedObject : Map<Any?, Any?> {
13+
actual val raw: Map<String, Any?>
14+
}
15+
16+
@PublishedApi
17+
internal data class InternalEncodedObject internal constructor(
18+
override val raw: Map<String, Any?>
19+
) : EncodedObject, Map<Any?, Any?> by raw.mapKeys({ (key, _) -> key })
1320

1421
@PublishedApi
15-
internal actual fun List<Pair<String, Any?>>.asEncodedObject() = EncodedObject(toMap())
22+
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = InternalEncodedObject(this)
1623

1724
@PublishedApi
1825
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/_encoders.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ import kotlinx.serialization.descriptors.StructureKind
1010
import kotlin.js.Json
1111
import kotlin.js.json
1212

13-
actual class EncodedObject internal constructor(private val keyValues: List<Pair<String, Any?>>) {
14-
actual val raw get() = keyValues.toMap()
15-
val json get() = json(*keyValues.toTypedArray())
13+
actual interface EncodedObject {
14+
actual val raw: Map<String, Any?>
15+
val json: Json
1616
}
1717

1818
@PublishedApi
19-
internal actual fun List<Pair<String, Any?>>.asEncodedObject() = EncodedObject(this)
19+
internal class InternalEncodedObject internal constructor(override val raw: Map<String, Any?>) : EncodedObject {
20+
override val json: Json get() = json(*raw.entries.map { (key, value) -> key to value }.toTypedArray())
21+
}
22+
23+
@PublishedApi
24+
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = InternalEncodedObject(this)
2025

2126
@PublishedApi
2227
internal actual fun Any.asNativeMap(): Map<*, *>? {

0 commit comments

Comments
 (0)