Skip to content

Commit a629f9a

Browse files
committed
moved EncodedData to internal
1 parent 9f7d3cb commit a629f9a

File tree

20 files changed

+126
-166
lines changed

20 files changed

+126
-166
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@file:JvmName("AndroidEncodedObject")
2+
package dev.gitlive.firebase.internal
3+
4+
val EncodedObject.android: Map<String, Any?> get() = raw
5+
6+
@PublishedApi
7+
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>

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

-10
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,11 @@
44

55
package dev.gitlive.firebase.internal
66

7-
import dev.gitlive.firebase.EncodedObject
87
import kotlinx.serialization.descriptors.PolymorphicKind
98
import kotlinx.serialization.descriptors.SerialDescriptor
109
import kotlinx.serialization.descriptors.StructureKind
1110
import kotlin.collections.set
1211

13-
@PublishedApi
14-
internal data class EncodedObjectImpl internal constructor(override val raw: Map<String, Any?>) : EncodedObject, Map<String, Any?> by raw
15-
16-
@PublishedApi
17-
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = EncodedObjectImpl(this)
18-
19-
@PublishedApi
20-
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>
21-
2212
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when(descriptor.kind) {
2313
StructureKind.LIST -> mutableListOf<Any?>()
2414
.also { value = it }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.gitlive.firebase.internal
2+
3+
import kotlin.jvm.JvmInline
4+
5+
/**
6+
* Platform specific object for storing encoded data that can be used for methods that explicitly require an object.
7+
* This is essentially a [Map] of [String] and [Any]? (as represented by [raw]) but since [encode] gives a platform specific value, this method wraps that.
8+
*/
9+
sealed interface EncodedObject {
10+
val raw: Map<String, Any?>
11+
}
12+
13+
@JvmInline
14+
@PublishedApi
15+
internal value class EncodedObjectImpl(override val raw: Map<String, Any?>) : EncodedObject
16+
17+
@PublishedApi
18+
internal expect fun Any.asNativeMap(): Map<*, *>?
19+
20+
@PublishedApi
21+
internal fun Map<*, *>.asEncodedObject(): EncodedObject = map { (key, value) ->
22+
if (key is String) {
23+
key to value
24+
} else {
25+
throw IllegalArgumentException("Expected a String key but received $key")
26+
}
27+
}.toMap().let(::EncodedObjectImpl)

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

-16
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package dev.gitlive.firebase.internal
66

77
import dev.gitlive.firebase.EncodeSettings
8-
import dev.gitlive.firebase.EncodedObject
98
import kotlinx.serialization.ExperimentalSerializationApi
109
import kotlinx.serialization.SerializationStrategy
1110
import kotlinx.serialization.descriptors.SerialDescriptor
@@ -74,21 +73,6 @@ internal inline fun <reified T> encode(value: T, encodeSettings: EncodeSettings)
7473
}.value
7574
}
7675

77-
@PublishedApi
78-
expect internal fun Any.asNativeMap(): Map<*, *>?
79-
80-
@PublishedApi
81-
internal fun Map<*, *>.asEncodedObject(): EncodedObject = map { (key, value) ->
82-
if (key is String) {
83-
key to value
84-
} else {
85-
throw IllegalArgumentException("Expected a String key but received $key")
86-
}
87-
}.toMap().asEncodedObject()
88-
89-
@PublishedApi
90-
internal expect fun Map<String, Any?>.asEncodedObject(): EncodedObject
91-
9276
/**
9377
* An extension which which serializer to use for value. Handy in updating fields by name or path
9478
* where using annotation is not possible
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package dev.gitlive.firebase.internal
2+
3+
val EncodedObject.ios: Map<Any?, *> get() = raw.mapKeys { (key, _) -> key }
4+
5+
@PublishedApi
6+
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>

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

-12
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,11 @@
44

55
package dev.gitlive.firebase.internal
66

7-
import dev.gitlive.firebase.EncodedObject
87
import kotlinx.serialization.descriptors.PolymorphicKind
98
import kotlinx.serialization.descriptors.SerialDescriptor
109
import kotlinx.serialization.descriptors.StructureKind
1110
import kotlin.collections.set
1211

13-
@PublishedApi
14-
internal data class InternalEncodedObject internal constructor(
15-
override val raw: Map<String, Any?>
16-
) : EncodedObject, Map<Any?, Any?> by raw.mapKeys({ (key, _) -> key })
17-
18-
@PublishedApi
19-
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = InternalEncodedObject(this)
20-
21-
@PublishedApi
22-
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>
23-
2412
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when(descriptor.kind) {
2513
StructureKind.LIST -> encodeAsList()
2614
StructureKind.MAP -> mutableListOf<Any?>()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dev.gitlive.firebase.internal
2+
3+
import kotlin.js.Json
4+
import kotlin.js.json
5+
6+
val EncodedObject.js: Json get() = json(*raw.entries.map { (key, value) -> key to value }.toTypedArray())
7+
8+
@PublishedApi
9+
internal actual fun Any.asNativeMap(): Map<*, *>? {
10+
val json = when (this) {
11+
is Number -> null
12+
is Boolean -> null
13+
is String -> null
14+
is Map<*, *> -> {
15+
if (keys.all { it is String }) {
16+
this as Json
17+
} else {
18+
null
19+
}
20+
}
21+
is Collection<*> -> null
22+
is Array<*> -> null
23+
else -> {
24+
this as Json
25+
}
26+
} ?: return null
27+
val mutableMap = mutableMapOf<String, Any?>()
28+
for (key in js("Object").keys(json)) {
29+
mutableMap[key] = json[key]
30+
}
31+
return mutableMap.toMap()
32+
}

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

-37
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,11 @@
44

55
package dev.gitlive.firebase.internal
66

7-
import dev.gitlive.firebase.EncodedObject
87
import kotlinx.serialization.descriptors.PolymorphicKind
98
import kotlinx.serialization.descriptors.SerialDescriptor
109
import kotlinx.serialization.descriptors.StructureKind
11-
import kotlin.js.Json
1210
import kotlin.js.json
1311

14-
@PublishedApi
15-
internal class InternalEncodedObject internal constructor(override val raw: Map<String, Any?>) :
16-
EncodedObject {
17-
override val json: Json get() = json(*raw.entries.map { (key, value) -> key to value }.toTypedArray())
18-
}
19-
20-
@PublishedApi
21-
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = InternalEncodedObject(this)
22-
23-
@PublishedApi
24-
internal actual fun Any.asNativeMap(): Map<*, *>? {
25-
val json = when (this) {
26-
is Number -> null
27-
is Boolean -> null
28-
is String -> null
29-
is Map<*, *> -> {
30-
if (keys.all { it is String }) {
31-
this as Json
32-
} else {
33-
null
34-
}
35-
}
36-
is Collection<*> -> null
37-
is Array<*> -> null
38-
else -> {
39-
this as Json
40-
}
41-
} ?: return null
42-
val mutableMap = mutableMapOf<String, Any?>()
43-
for (key in js("Object").keys(json)) {
44-
mutableMap[key] = json[key]
45-
}
46-
return mutableMap.toMap()
47-
}
48-
4912
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when(descriptor.kind) {
5013
StructureKind.LIST -> encodeAsList(descriptor)
5114
StructureKind.MAP -> {

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

-9
This file was deleted.

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

-13
This file was deleted.

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

-9
This file was deleted.

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

-12
This file was deleted.

firebase-database/src/androidMain/kotlin/dev/gitlive/firebase/database/database.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ import com.google.firebase.database.Transaction
1313
import com.google.firebase.database.ValueEventListener
1414
import dev.gitlive.firebase.DecodeSettings
1515
import dev.gitlive.firebase.EncodeDecodeSettingsBuilder
16-
import dev.gitlive.firebase.EncodedObject
16+
import dev.gitlive.firebase.internal.EncodedObject
1717
import dev.gitlive.firebase.Firebase
1818
import dev.gitlive.firebase.FirebaseApp
1919
import dev.gitlive.firebase.database.ChildEvent.Type
2020
import dev.gitlive.firebase.database.FirebaseDatabase.Companion.FirebaseDatabase
21+
import dev.gitlive.firebase.internal.android
2122
import dev.gitlive.firebase.internal.decode
2223
import dev.gitlive.firebase.internal.reencodeTransformation
2324
import kotlinx.coroutines.CompletableDeferred
@@ -207,7 +208,7 @@ internal actual class NativeDatabaseReference internal constructor(
207208
.run { Unit }
208209

209210
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) =
210-
android.updateChildren(encodedUpdate)
211+
android.updateChildren(encodedUpdate.android)
211212
.run { if(persistenceEnabled) await() else awaitWhileOnline(database) }
212213
.run { Unit }
213214

@@ -297,7 +298,7 @@ internal actual class NativeOnDisconnect internal constructor(
297298
.run { Unit }
298299

299300
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) =
300-
android.updateChildren(encodedUpdate)
301+
android.updateChildren(encodedUpdate.android)
301302
.run { if(persistenceEnabled) await() else awaitWhileOnline(database) }
302303
.run { Unit }
303304
}

firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package dev.gitlive.firebase.database
77
import dev.gitlive.firebase.DecodeSettings
88
import dev.gitlive.firebase.EncodeDecodeSettingsBuilder
99
import dev.gitlive.firebase.EncodeSettings
10-
import dev.gitlive.firebase.EncodedObject
10+
import dev.gitlive.firebase.internal.EncodedObject
1111
import dev.gitlive.firebase.Firebase
1212
import dev.gitlive.firebase.FirebaseApp
1313
import dev.gitlive.firebase.database.ChildEvent.Type.ADDED

firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ import cocoapods.FirebaseDatabase.FIRDatabaseReference
1616
import cocoapods.FirebaseDatabase.FIRTransactionResult
1717
import dev.gitlive.firebase.DecodeSettings
1818
import dev.gitlive.firebase.EncodeDecodeSettingsBuilder
19-
import dev.gitlive.firebase.EncodedObject
2019
import dev.gitlive.firebase.Firebase
2120
import dev.gitlive.firebase.FirebaseApp
2221
import dev.gitlive.firebase.database.ChildEvent.Type
2322
import dev.gitlive.firebase.database.ChildEvent.Type.ADDED
2423
import dev.gitlive.firebase.database.ChildEvent.Type.CHANGED
2524
import dev.gitlive.firebase.database.ChildEvent.Type.MOVED
2625
import dev.gitlive.firebase.database.ChildEvent.Type.REMOVED
26+
import dev.gitlive.firebase.internal.EncodedObject
2727
import dev.gitlive.firebase.internal.decode
28+
import dev.gitlive.firebase.internal.ios
2829
import dev.gitlive.firebase.internal.reencodeTransformation
2930
import kotlinx.coroutines.CompletableDeferred
3031
import kotlinx.coroutines.FlowPreview
@@ -170,7 +171,7 @@ internal actual class NativeDatabaseReference internal constructor(
170171
}
171172

172173
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) {
173-
ios.await(persistenceEnabled) { updateChildValues(encodedUpdate, it) }
174+
ios.await(persistenceEnabled) { updateChildValues(encodedUpdate.ios, it) }
174175
}
175176

176177
actual suspend fun removeValue() {
@@ -241,7 +242,7 @@ internal actual class NativeOnDisconnect internal constructor(
241242
}
242243

243244
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) {
244-
ios.await(persistenceEnabled) { onDisconnectUpdateChildValues(encodedUpdate, it) }
245+
ios.await(persistenceEnabled) { onDisconnectUpdateChildValues(encodedUpdate.ios, it) }
245246
}
246247
}
247248

firebase-database/src/jsMain/kotlin/dev/gitlive/firebase/database/database.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package dev.gitlive.firebase.database
66

77
import dev.gitlive.firebase.DecodeSettings
88
import dev.gitlive.firebase.EncodeDecodeSettingsBuilder
9-
import dev.gitlive.firebase.EncodedObject
109
import dev.gitlive.firebase.Firebase
1110
import dev.gitlive.firebase.FirebaseApp
1211
import dev.gitlive.firebase.database.externals.CancelCallback
@@ -28,7 +27,9 @@ import dev.gitlive.firebase.database.externals.ref
2827
import dev.gitlive.firebase.database.externals.remove
2928
import dev.gitlive.firebase.database.externals.set
3029
import dev.gitlive.firebase.database.externals.update
30+
import dev.gitlive.firebase.internal.EncodedObject
3131
import dev.gitlive.firebase.internal.decode
32+
import dev.gitlive.firebase.internal.js
3233
import dev.gitlive.firebase.internal.reencodeTransformation
3334
import kotlinx.coroutines.asDeferred
3435
import kotlinx.coroutines.channels.awaitClose
@@ -183,7 +184,7 @@ internal actual class NativeDatabaseReference internal constructor(
183184
}
184185

185186
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) =
186-
rethrow { update(js, encodedUpdate.json).awaitWhileOnline(database) }
187+
rethrow { update(js, encodedUpdate.js).awaitWhileOnline(database) }
187188

188189

189190
actual suspend fun <T> runTransaction(strategy: KSerializer<T>, buildSettings: EncodeDecodeSettingsBuilder.() -> Unit, transactionUpdate: (currentData: T) -> T): DataSnapshot {
@@ -235,7 +236,7 @@ internal actual class NativeOnDisconnect internal constructor(
235236
rethrow { js.set(encodedValue).awaitWhileOnline(database) }
236237

237238
actual suspend fun updateEncodedChildren(encodedUpdate: EncodedObject) =
238-
rethrow { js.update(encodedUpdate.json).awaitWhileOnline(database) }
239+
rethrow { js.update(encodedUpdate.js).awaitWhileOnline(database) }
239240

240241
}
241242

0 commit comments

Comments
 (0)