diff --git a/README.md b/README.md
index f0546c011..ede0080eb 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Asynchronous operations that return a single or no value are represented by susp
suspend fun signInWithCustomToken(token: String): AuthResult
```
-It is important to remember that unlike a callback based API, wating for suspending functions to complete is implicit and so if you don't want to wait for the result you can `launch` a new coroutine:
+It is important to remember that unlike a callback based API, waiting for suspending functions to complete is implicit and so if you don't want to wait for the result you can `launch` a new coroutine:
```kotlin
//TODO don't use GlobalScope
@@ -185,6 +185,44 @@ In combination with a `SerialName` specified for the child class, you have full
}
```
+
Serialization of Updates
+Firestore contains update methods that allow for multiple fields to be updated at the same time.
+This sdk offers special update methods that allow for applying custom serialization to each individual field though an update builder.
+Where an `update` method exists, an `updateFields` method will also be available. In this, each value can have its serializer customized:
+
+```kotlin
+documentRef.updateFields {
+ "field" to "value"
+ // Set the value of otherField to "1" using a custom Serializer
+ "otherField".to(IntAsStringSerializer(), 1)
+
+ // Overwrite build settings. All fields added within this block will have these build settings applied
+ withEncodeSettings {
+ encodeDefaults = true
+ serializersModule = module
+ "city" to abstractCity
+ }
+}
+```
+
+Similarly, the `Query` methods `startAt`/`startAfter`/`endAt`/`endBefore` have an alternative method in `startAtFieldValues`/`startAfterFieldValues`/`endAtFieldValues`/`endBeforeFieldValues`
+
+```kotlin
+query.orderBy("field", "otherField", "city").startAtFieldValues { // similar syntax for startAfter/endAt/endBefore
+ add("Value")
+
+ // Starts at "1" for the otherField value
+ add(1, IntAsStringSerializer())
+
+ // Overwrite build settings. All field values added within this block will have these build settings applied
+ withEncodeSettings {
+ encodeDefaults = true
+ serializersModule = module
+ add(abstractCity)
+ }
+}
+```
+
To reduce boilerplate, default arguments are used in the places where the Firebase Android SDK employs the builder pattern:
@@ -209,8 +247,6 @@ user.updateProfile(profileUpdates)
user.updateProfile(displayName = "Jane Q. User", photoURL = "https://example.com/jane-q-user/profile.jpg")
```
-
-
To improve readability and reduce boilerplate for functions such as the Cloud Firestore query operators are built with infix notation:
diff --git a/firebase-common-internal/api/android/firebase-common-internal.api b/firebase-common-internal/api/android/firebase-common-internal.api
index 44393d3b9..49e83fd95 100644
--- a/firebase-common-internal/api/android/firebase-common-internal.api
+++ b/firebase-common-internal/api/android/firebase-common-internal.api
@@ -78,59 +78,9 @@ public final class dev/gitlive/firebase/internal/EncodersKt {
public static final fun encode (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Z)Ljava/lang/Object;
public static final fun encodeAsObject (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/internal/EncodedObject;
public static synthetic fun encodeAsObject$default (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/internal/EncodedObject;
- public static final fun withSerializer (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ljava/lang/Object;
-}
-
-public final class dev/gitlive/firebase/internal/FirebaseClassDecoder : dev/gitlive/firebase/internal/FirebaseCompositeDecoder {
- public fun (ILdev/gitlive/firebase/DecodeSettings;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V
- public fun decodeElementIndex (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeSequentially ()Z
-}
-
-public class dev/gitlive/firebase/internal/FirebaseCompositeDecoder : kotlinx/serialization/encoding/CompositeDecoder {
- public fun (ILdev/gitlive/firebase/DecodeSettings;Lkotlin/jvm/functions/Function2;)V
- public fun decodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
- public fun decodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)B
- public fun decodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)C
- public fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)D
- public fun decodeElementIndex (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeFloatElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)F
- public fun decodeInlineElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/Decoder;
- public fun decodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)I
- public fun decodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)J
- public fun decodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
- public fun decodeSequentially ()Z
- public fun decodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
- public fun decodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)S
- public fun decodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;
- public fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
- public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
-}
-
-public class dev/gitlive/firebase/internal/FirebaseCompositeEncoder : kotlinx/serialization/encoding/CompositeEncoder {
- public fun (Ldev/gitlive/firebase/EncodeSettings;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V
- public synthetic fun (Ldev/gitlive/firebase/EncodeSettings;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
- public fun encodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IZ)V
- public fun encodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IB)V
- public fun encodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IC)V
- public fun encodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ID)V
- public fun encodeFloatElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IF)V
- public fun encodeInlineElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/Encoder;
- public fun encodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;II)V
- public fun encodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IJ)V
- public fun encodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
- public final fun encodeObject (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/Object;)V
- public final fun encodePolymorphicClassDiscriminator (Ljava/lang/String;Ljava/lang/String;)V
- public fun encodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
- public fun encodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IS)V
- public fun encodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/String;)V
- public fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
- public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
- public fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
}
-public final class dev/gitlive/firebase/internal/FirebaseDecoder : kotlinx/serialization/encoding/Decoder {
+public final class dev/gitlive/firebase/internal/FirebaseDecoderImpl : dev/gitlive/firebase/FirebaseDecoder {
public fun (Ljava/lang/Object;)V
public fun (Ljava/lang/Object;Ldev/gitlive/firebase/DecodeSettings;)V
public fun beginStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder;
@@ -153,7 +103,7 @@ public final class dev/gitlive/firebase/internal/FirebaseDecoder : kotlinx/seria
public final fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/internal/FirebaseEncoder : kotlinx/serialization/encoding/Encoder {
+public final class dev/gitlive/firebase/internal/FirebaseEncoderImpl : dev/gitlive/firebase/FirebaseEncoder {
public fun (Ldev/gitlive/firebase/EncodeSettings;)V
public fun (Z)V
public fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
@@ -217,25 +167,3 @@ public final class dev/gitlive/firebase/internal/SpecialValueSerializer : kotlin
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
-public final class dev/gitlive/firebase/internal/ValueWithSerializer {
- public fun (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)V
- public final fun component1 ()Ljava/lang/Object;
- public final fun component2 ()Lkotlinx/serialization/SerializationStrategy;
- public final fun copy (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ldev/gitlive/firebase/internal/ValueWithSerializer;
- public static synthetic fun copy$default (Ldev/gitlive/firebase/internal/ValueWithSerializer;Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;ILjava/lang/Object;)Ldev/gitlive/firebase/internal/ValueWithSerializer;
- public fun equals (Ljava/lang/Object;)Z
- public final fun getSerializer ()Lkotlinx/serialization/SerializationStrategy;
- public final fun getValue ()Ljava/lang/Object;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class dev/gitlive/firebase/internal/_decodersKt {
- public static final fun getPolymorphicType (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
- public static final fun structureDecoder (Ldev/gitlive/firebase/internal/FirebaseDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;Z)Lkotlinx/serialization/encoding/CompositeDecoder;
-}
-
-public final class dev/gitlive/firebase/internal/_encodersKt {
- public static final fun structureEncoder (Ldev/gitlive/firebase/internal/FirebaseEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ldev/gitlive/firebase/internal/FirebaseCompositeEncoder;
-}
-
diff --git a/firebase-common-internal/api/jvm/firebase-common-internal.api b/firebase-common-internal/api/jvm/firebase-common-internal.api
index 44393d3b9..49e83fd95 100644
--- a/firebase-common-internal/api/jvm/firebase-common-internal.api
+++ b/firebase-common-internal/api/jvm/firebase-common-internal.api
@@ -78,59 +78,9 @@ public final class dev/gitlive/firebase/internal/EncodersKt {
public static final fun encode (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Z)Ljava/lang/Object;
public static final fun encodeAsObject (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/internal/EncodedObject;
public static synthetic fun encodeAsObject$default (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/internal/EncodedObject;
- public static final fun withSerializer (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ljava/lang/Object;
-}
-
-public final class dev/gitlive/firebase/internal/FirebaseClassDecoder : dev/gitlive/firebase/internal/FirebaseCompositeDecoder {
- public fun (ILdev/gitlive/firebase/DecodeSettings;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V
- public fun decodeElementIndex (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeSequentially ()Z
-}
-
-public class dev/gitlive/firebase/internal/FirebaseCompositeDecoder : kotlinx/serialization/encoding/CompositeDecoder {
- public fun (ILdev/gitlive/firebase/DecodeSettings;Lkotlin/jvm/functions/Function2;)V
- public fun decodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
- public fun decodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)B
- public fun decodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)C
- public fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)D
- public fun decodeElementIndex (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
- public fun decodeFloatElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)F
- public fun decodeInlineElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/Decoder;
- public fun decodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)I
- public fun decodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)J
- public fun decodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
- public fun decodeSequentially ()Z
- public fun decodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
- public fun decodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)S
- public fun decodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;
- public fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
- public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
-}
-
-public class dev/gitlive/firebase/internal/FirebaseCompositeEncoder : kotlinx/serialization/encoding/CompositeEncoder {
- public fun (Ldev/gitlive/firebase/EncodeSettings;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V
- public synthetic fun (Ldev/gitlive/firebase/EncodeSettings;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
- public fun encodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IZ)V
- public fun encodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IB)V
- public fun encodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IC)V
- public fun encodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ID)V
- public fun encodeFloatElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IF)V
- public fun encodeInlineElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/Encoder;
- public fun encodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;II)V
- public fun encodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IJ)V
- public fun encodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
- public final fun encodeObject (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/Object;)V
- public final fun encodePolymorphicClassDiscriminator (Ljava/lang/String;Ljava/lang/String;)V
- public fun encodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
- public fun encodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IS)V
- public fun encodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/String;)V
- public fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
- public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
- public fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
}
-public final class dev/gitlive/firebase/internal/FirebaseDecoder : kotlinx/serialization/encoding/Decoder {
+public final class dev/gitlive/firebase/internal/FirebaseDecoderImpl : dev/gitlive/firebase/FirebaseDecoder {
public fun (Ljava/lang/Object;)V
public fun (Ljava/lang/Object;Ldev/gitlive/firebase/DecodeSettings;)V
public fun beginStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder;
@@ -153,7 +103,7 @@ public final class dev/gitlive/firebase/internal/FirebaseDecoder : kotlinx/seria
public final fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/internal/FirebaseEncoder : kotlinx/serialization/encoding/Encoder {
+public final class dev/gitlive/firebase/internal/FirebaseEncoderImpl : dev/gitlive/firebase/FirebaseEncoder {
public fun (Ldev/gitlive/firebase/EncodeSettings;)V
public fun (Z)V
public fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
@@ -217,25 +167,3 @@ public final class dev/gitlive/firebase/internal/SpecialValueSerializer : kotlin
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
-public final class dev/gitlive/firebase/internal/ValueWithSerializer {
- public fun (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)V
- public final fun component1 ()Ljava/lang/Object;
- public final fun component2 ()Lkotlinx/serialization/SerializationStrategy;
- public final fun copy (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ldev/gitlive/firebase/internal/ValueWithSerializer;
- public static synthetic fun copy$default (Ldev/gitlive/firebase/internal/ValueWithSerializer;Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;ILjava/lang/Object;)Ldev/gitlive/firebase/internal/ValueWithSerializer;
- public fun equals (Ljava/lang/Object;)Z
- public final fun getSerializer ()Lkotlinx/serialization/SerializationStrategy;
- public final fun getValue ()Ljava/lang/Object;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class dev/gitlive/firebase/internal/_decodersKt {
- public static final fun getPolymorphicType (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
- public static final fun structureDecoder (Ldev/gitlive/firebase/internal/FirebaseDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;Z)Lkotlinx/serialization/encoding/CompositeDecoder;
-}
-
-public final class dev/gitlive/firebase/internal/_encodersKt {
- public static final fun structureEncoder (Ldev/gitlive/firebase/internal/FirebaseEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ldev/gitlive/firebase/internal/FirebaseCompositeEncoder;
-}
-
diff --git a/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt b/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
index 77644ccfe..4b477364c 100644
--- a/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
+++ b/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
@@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.StructureKind
import kotlinx.serialization.encoding.CompositeDecoder
-public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
+internal actual fun FirebaseDecoderImpl.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
StructureKind.CLASS, StructureKind.OBJECT -> decodeAsMap(false)
StructureKind.LIST -> (value as? List<*>).orEmpty().let {
FirebaseCompositeDecoder(it.size, settings) { _, index -> it[index] }
@@ -26,10 +26,10 @@ public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor,
else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
}
-public actual fun getPolymorphicType(value: Any?, discriminator: String): String =
+internal actual fun getPolymorphicType(value: Any?, discriminator: String): String =
(value as? Map<*, *>).orEmpty()[discriminator] as String
-private fun FirebaseDecoder.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as? Map<*, *>).orEmpty().let { map ->
+private fun FirebaseDecoderImpl.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as? Map<*, *>).orEmpty().let { map ->
FirebaseClassDecoder(map.size, settings, { map.containsKey(it) }) { desc, index ->
if (isNestedPolymorphic) {
if (desc.getElementName(index) == "value") {
diff --git a/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt b/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
index e8d3aca10..eb7be3ba2 100644
--- a/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
+++ b/firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
@@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.StructureKind
import kotlin.collections.set
-public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
+internal actual fun FirebaseEncoderImpl.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
StructureKind.LIST -> mutableListOf()
.also { value = it }
.let { FirebaseCompositeEncoder(settings) { _, index, value -> it.add(index, value) } }
@@ -20,7 +20,7 @@ public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor)
else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
}
-private fun FirebaseEncoder.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = mutableMapOf()
+private fun FirebaseEncoderImpl.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = mutableMapOf()
.also { value = it }
.let {
FirebaseCompositeEncoder(
diff --git a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/Polymorphic.kt b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/Polymorphic.kt
index 77bb77dc7..2297be79b 100644
--- a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/Polymorphic.kt
+++ b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/Polymorphic.kt
@@ -12,7 +12,7 @@ import kotlinx.serialization.internal.AbstractPolymorphicSerializer
* See https://github.com/Kotlin/kotlinx.serialization/blob/master/formats/json/commonMain/src/kotlinx/serialization/json/internal/Polymorphic.kt
*/
@Suppress("UNCHECKED_CAST")
-internal fun FirebaseEncoder.encodePolymorphically(
+internal fun FirebaseEncoderImpl.encodePolymorphically(
serializer: SerializationStrategy,
value: T,
ifPolymorphic: (String) -> Unit,
@@ -34,7 +34,7 @@ internal fun FirebaseEncoder.encodePolymorphically(
}
@Suppress("UNCHECKED_CAST")
-internal fun FirebaseDecoder.decodeSerializableValuePolymorphic(
+internal fun FirebaseDecoderImpl.decodeSerializableValuePolymorphic(
value: Any?,
deserializer: DeserializationStrategy,
): T {
diff --git a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/decoders.kt b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/decoders.kt
index 084bc4f62..27952ac7d 100644
--- a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/decoders.kt
+++ b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/decoders.kt
@@ -5,6 +5,7 @@
package dev.gitlive.firebase.internal
import dev.gitlive.firebase.DecodeSettings
+import dev.gitlive.firebase.FirebaseDecoder
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerializationException
@@ -31,12 +32,13 @@ public inline fun decode(strategy: DeserializationStrategy, value: Any?,
@PublishedApi
internal fun decode(strategy: DeserializationStrategy, value: Any?, decodeSettings: DecodeSettings): T {
require(value != null || strategy.descriptor.isNullable) { "Value was null for non-nullable type ${strategy.descriptor.serialName}" }
- return FirebaseDecoder(value, decodeSettings).decodeSerializableValue(strategy)
+ return FirebaseDecoderImpl(value, decodeSettings).decodeSerializableValue(strategy)
}
-public expect fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder
-public expect fun getPolymorphicType(value: Any?, discriminator: String): String
+internal expect fun FirebaseDecoderImpl.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder
+internal expect fun getPolymorphicType(value: Any?, discriminator: String): String
-public class FirebaseDecoder(public val value: Any?, internal val settings: DecodeSettings) : Decoder {
+@PublishedApi
+internal class FirebaseDecoderImpl(val value: Any?, internal val settings: DecodeSettings) : FirebaseDecoder {
public constructor(value: Any?) : this(value, DecodeSettingsImpl())
@@ -68,12 +70,12 @@ public class FirebaseDecoder(public val value: Any?, internal val settings: Deco
override fun decodeNull(): Nothing? = decodeNull(value)
- override fun decodeInline(descriptor: SerialDescriptor): Decoder = FirebaseDecoder(value, settings)
+ override fun decodeInline(descriptor: SerialDescriptor): Decoder = FirebaseDecoderImpl(value, settings)
override fun decodeSerializableValue(deserializer: DeserializationStrategy): T = decodeSerializableValuePolymorphic(value, deserializer)
}
-public class FirebaseClassDecoder(
+internal class FirebaseClassDecoder(
size: Int,
settings: DecodeSettings,
private val containsKey: (name: String) -> Boolean,
@@ -91,7 +93,7 @@ public class FirebaseClassDecoder(
?: DECODE_DONE
}
-public open class FirebaseCompositeDecoder(
+internal open class FirebaseCompositeDecoder(
private val size: Int,
internal val settings: DecodeSettings,
private val get: (descriptor: SerialDescriptor, index: Int) -> Any?,
@@ -111,7 +113,7 @@ public open class FirebaseCompositeDecoder(
deserializer: DeserializationStrategy,
previousValue: T?,
): T = decodeElement(descriptor, index) {
- deserializer.deserialize(FirebaseDecoder(it, settings))
+ deserializer.deserialize(FirebaseDecoderImpl(it, settings))
}
override fun decodeBooleanElement(descriptor: SerialDescriptor, index: Int): Boolean =
@@ -160,7 +162,7 @@ public open class FirebaseCompositeDecoder(
@ExperimentalSerializationApi
override fun decodeInlineElement(descriptor: SerialDescriptor, index: Int): Decoder =
decodeElement(descriptor, index) {
- FirebaseDecoder(it, settings)
+ FirebaseDecoderImpl(it, settings)
}
private fun decodeElement(descriptor: SerialDescriptor, index: Int, decoder: (Any?) -> T): T = try {
diff --git a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/encoders.kt b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/encoders.kt
index c6c9e4abf..767688ad0 100644
--- a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/encoders.kt
+++ b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/encoders.kt
@@ -5,6 +5,7 @@
package dev.gitlive.firebase.internal
import dev.gitlive.firebase.EncodeSettings
+import dev.gitlive.firebase.FirebaseEncoder
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.descriptors.SerialDescriptor
@@ -22,7 +23,7 @@ public inline fun encode(strategy: SerializationStrategy, value: T, build
@PublishedApi
internal fun encode(strategy: SerializationStrategy, value: T, encodeSettings: EncodeSettings): Any? =
- FirebaseEncoder(encodeSettings).apply { encodeSerializableValue(strategy, value) }.value
+ FirebaseEncoderImpl(encodeSettings).apply { encodeSerializableValue(strategy, value) }.value
@Deprecated("Deprecated. Use builder instead", replaceWith = ReplaceWith("encode(value) { this.encodeDefaults = shouldEncodeElementDefault }"))
public inline fun encode(value: T, shouldEncodeElementDefault: Boolean): Any? = encode(value) {
@@ -60,31 +61,17 @@ public inline fun encodeAsObject(value: T, buildSettings: Enco
@PublishedApi
internal inline fun encode(value: T, encodeSettings: EncodeSettings): Any? = value?.let {
- FirebaseEncoder(encodeSettings).apply {
- if (it is ValueWithSerializer<*> && it.value is T) {
- @Suppress("UNCHECKED_CAST")
- (it as ValueWithSerializer).let {
- encodeSerializableValue(it.serializer, it.value)
- }
- } else {
- encodeSerializableValue(it.firebaseSerializer(), it)
- }
+ FirebaseEncoderImpl(encodeSettings).apply {
+ encodeSerializableValue(it.firebaseSerializer(), it)
}.value
}
-/**
- * An extension which which serializer to use for value. Handy in updating fields by name or path
- * where using annotation is not possible
- * @return a value with a custom serializer.
- */
-public fun T.withSerializer(serializer: SerializationStrategy): Any = ValueWithSerializer(this, serializer)
-public data class ValueWithSerializer(val value: T, val serializer: SerializationStrategy)
-
-public expect fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder
+internal expect fun FirebaseEncoderImpl.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder
-public class FirebaseEncoder(
+@PublishedApi
+internal class FirebaseEncoderImpl(
internal val settings: EncodeSettings,
-) : Encoder {
+) : FirebaseEncoder {
public constructor(shouldEncodeElementDefault: Boolean) : this(
EncodeSettingsImpl.Builder().apply { this.encodeDefaults = shouldEncodeElementDefault }.buildEncodeSettings(),
@@ -162,19 +149,13 @@ public class FirebaseEncoder(
}
}
-public open class FirebaseCompositeEncoder(
+internal open class FirebaseCompositeEncoder(
private val settings: EncodeSettings,
private val end: () -> Unit = {},
private val setPolymorphicType: (String, String) -> Unit = { _, _ -> },
private val set: (descriptor: SerialDescriptor, index: Int, value: Any?) -> Unit,
) : CompositeEncoder {
-// private fun SerializationStrategy.toFirebase(): SerializationStrategy = when(descriptor.kind) {
-// StructureKind.MAP -> FirebaseMapSerializer(descriptor.getElementDescriptor(1)) as SerializationStrategy
-// StructureKind.LIST -> FirebaseListSerializer(descriptor.getElementDescriptor(0)) as SerializationStrategy
-// else -> this
-// }
-
override val serializersModule: SerializersModule = settings.serializersModule
override fun endStructure(descriptor: SerialDescriptor): Unit = end()
@@ -190,7 +171,7 @@ public open class FirebaseCompositeEncoder(
descriptor,
index,
value?.let {
- FirebaseEncoder(settings).apply {
+ FirebaseEncoderImpl(settings).apply {
encodeSerializableValue(serializer, value)
}.value
},
@@ -204,7 +185,7 @@ public open class FirebaseCompositeEncoder(
): Unit = set(
descriptor,
index,
- FirebaseEncoder(settings).apply {
+ FirebaseEncoderImpl(settings).apply {
encodeSerializableValue(serializer, value)
}.value,
)
@@ -231,7 +212,7 @@ public open class FirebaseCompositeEncoder(
@ExperimentalSerializationApi
override fun encodeInlineElement(descriptor: SerialDescriptor, index: Int): Encoder =
- FirebaseEncoder(settings)
+ FirebaseEncoderImpl(settings)
public fun encodePolymorphicClassDiscriminator(discriminator: String, type: String) {
setPolymorphicType(discriminator, type)
diff --git a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt
index 41f319f88..cb1b1fb00 100644
--- a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt
+++ b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt
@@ -128,14 +128,14 @@ public class SpecialValueSerializer(
override val descriptor: SerialDescriptor = buildClassSerialDescriptor(serialName) { }
override fun serialize(encoder: Encoder, value: T) {
- if (encoder is FirebaseEncoder) {
+ if (encoder is FirebaseEncoderImpl) {
encoder.value = toNativeValue(value)
} else {
throw SerializationException("This serializer must be used with FirebaseEncoder")
}
}
- override fun deserialize(decoder: Decoder): T = if (decoder is FirebaseDecoder) {
+ override fun deserialize(decoder: Decoder): T = if (decoder is FirebaseDecoderImpl) {
fromNativeValue(decoder.value)
} else {
throw SerializationException("This serializer must be used with FirebaseDecoder")
diff --git a/firebase-common-internal/src/commonTest/kotlin/dev/gitlive/firebase/internal/EncodersTest.kt b/firebase-common-internal/src/commonTest/kotlin/dev/gitlive/firebase/internal/EncodersTest.kt
index 145d57b74..2017f8dc6 100644
--- a/firebase-common-internal/src/commonTest/kotlin/dev/gitlive/firebase/internal/EncodersTest.kt
+++ b/firebase-common-internal/src/commonTest/kotlin/dev/gitlive/firebase/internal/EncodersTest.kt
@@ -262,6 +262,47 @@ class EncodersTest {
assertEquals(nestedClass, decoded)
}
+ @Test
+ fun encodeDecodeNestedClassWithEmptyCollections() {
+ val module = SerializersModule {
+ polymorphic(AbstractClass::class, AbstractClass.serializer()) {
+ subclass(ImplementedClass::class, ImplementedClass.serializer())
+ }
+ }
+
+ val testData = TestData(mapOf(), mapOf(), true, null, ValueClass(42))
+ val sealedClass: SealedClass = SealedClass.Test("value")
+ val abstractClass: AbstractClass = ImplementedClass("value", true)
+ val nestedClass = NestedClass(testData, sealedClass, abstractClass, listOf(), listOf(), listOf(), mapOf(), mapOf(), mapOf())
+ val encoded = encode(NestedClass.serializer(), nestedClass) {
+ encodeDefaults = true
+ serializersModule = module
+ }
+
+ val testDataEncoded = nativeMapOf("map" to nativeMapOf(), "otherMap" to nativeMapOf(), "bool" to true, "nullableBool" to null, "valueClass" to 42)
+ val sealedEncoded = nativeMapOf("type" to "test", "value" to "value")
+ val abstractEncoded = nativeMapOf("type" to "implemented", "abstractValue" to "value", "otherValue" to true)
+ nativeAssertEquals(
+ nativeMapOf(
+ "testData" to testDataEncoded,
+ "sealed" to sealedEncoded,
+ "abstract" to abstractEncoded,
+ "testDataList" to nativeListOf(),
+ "sealedList" to nativeListOf(),
+ "abstractList" to nativeListOf(),
+ "testDataMap" to nativeMapOf(),
+ "sealedMap" to nativeMapOf(),
+ "abstractMap" to nativeMapOf(),
+ ),
+ encoded,
+ )
+
+ val decoded = decode(NestedClass.serializer(), encoded) {
+ serializersModule = module
+ }
+ assertEquals(nestedClass, decoded)
+ }
+
@Test
fun reencodeTransformationList() {
val reencoded = reencodeTransformation>(nativeListOf("One", "Two", "Three")) {
diff --git a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt b/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
index 00400b622..561d4c762 100644
--- a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
+++ b/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
@@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.PolymorphicKind
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.StructureKind
-public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
+internal actual fun FirebaseDecoderImpl.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
StructureKind.CLASS, StructureKind.OBJECT -> decodeAsMap(false)
StructureKind.LIST -> decodeAsList()
StructureKind.MAP -> (value as? Map<*, *>).orEmpty().entries.toList().let {
@@ -19,13 +19,13 @@ public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor,
else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
}
-public actual fun getPolymorphicType(value: Any?, discriminator: String): String =
+internal actual fun getPolymorphicType(value: Any?, discriminator: String): String =
(value as? Map<*, *>).orEmpty()[discriminator] as String
-private fun FirebaseDecoder.decodeAsList(): CompositeDecoder = (value as? List<*>).orEmpty().let {
+private fun FirebaseDecoderImpl.decodeAsList(): CompositeDecoder = (value as? List<*>).orEmpty().let {
FirebaseCompositeDecoder(it.size, settings) { _, index -> it[index] }
}
-private fun FirebaseDecoder.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as? Map<*, *>).orEmpty().let { map ->
+private fun FirebaseDecoderImpl.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as? Map<*, *>).orEmpty().let { map ->
FirebaseClassDecoder(map.size, settings, { map.containsKey(it) }) { desc, index ->
if (isNestedPolymorphic) {
if (desc.getElementName(index) == "value") {
diff --git a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt b/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
index efd200c20..bab44db4e 100644
--- a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
+++ b/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
@@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.StructureKind
import kotlin.collections.set
-public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
+internal actual fun FirebaseEncoderImpl.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
StructureKind.LIST -> encodeAsList()
StructureKind.MAP -> mutableListOf()
.let { FirebaseCompositeEncoder(settings, { value = it.chunked(2).associate { (k, v) -> k to v } }) { _, _, value -> it.add(value) } }
@@ -18,10 +18,10 @@ public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor)
else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
}
-private fun FirebaseEncoder.encodeAsList(): FirebaseCompositeEncoder = mutableListOf()
+private fun FirebaseEncoderImpl.encodeAsList(): FirebaseCompositeEncoder = mutableListOf()
.also { value = it }
.let { FirebaseCompositeEncoder(settings) { _, index, value -> it.add(index, value) } }
-private fun FirebaseEncoder.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = mutableMapOf()
+private fun FirebaseEncoderImpl.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = mutableMapOf()
.also { value = it }
.let {
FirebaseCompositeEncoder(
diff --git a/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt b/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
index 05701df40..1787c1cc4 100644
--- a/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
+++ b/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt
@@ -11,7 +11,7 @@ import kotlinx.serialization.descriptors.StructureKind
import kotlinx.serialization.encoding.CompositeDecoder
import kotlin.js.Json
-public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
+internal actual fun FirebaseDecoderImpl.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) {
StructureKind.CLASS, StructureKind.OBJECT -> decodeAsMap(false)
StructureKind.LIST -> decodeAsList()
StructureKind.MAP -> (js("Object").entries(value) as Array>).let {
@@ -39,15 +39,15 @@ public actual fun FirebaseDecoder.structureDecoder(descriptor: SerialDescriptor,
}
@Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE")
-public actual fun getPolymorphicType(value: Any?, discriminator: String): String =
+internal actual fun getPolymorphicType(value: Any?, discriminator: String): String =
(value as Json)[discriminator] as String
-private fun FirebaseDecoder.decodeAsList(): CompositeDecoder = (value as Array<*>).let {
+private fun FirebaseDecoderImpl.decodeAsList(): CompositeDecoder = (value as Array<*>).let {
FirebaseCompositeDecoder(it.size, settings) { _, index -> it[index] }
}
@Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE")
-private fun FirebaseDecoder.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as Json).let { json ->
+private fun FirebaseDecoderImpl.decodeAsMap(isNestedPolymorphic: Boolean): CompositeDecoder = (value as Json).let { json ->
FirebaseClassDecoder(js("Object").keys(value).length as Int, settings, { json[it] != undefined }) { desc, index ->
if (isNestedPolymorphic) {
if (desc.getElementName(index) == "value") {
diff --git a/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt b/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
index 1e21549a0..091d9c2da 100644
--- a/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
+++ b/firebase-common-internal/src/jsMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt
@@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.StructureKind
import kotlin.js.json
-public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
+internal actual fun FirebaseEncoderImpl.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when (descriptor.kind) {
StructureKind.LIST -> encodeAsList(descriptor)
StructureKind.MAP -> {
val map = json()
@@ -28,10 +28,10 @@ public actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor)
else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
}
-private fun FirebaseEncoder.encodeAsList(descriptor: SerialDescriptor): FirebaseCompositeEncoder = Array(descriptor.elementsCount) { null }
+private fun FirebaseEncoderImpl.encodeAsList(descriptor: SerialDescriptor): FirebaseCompositeEncoder = Array(descriptor.elementsCount - 1) { null }
.also { value = it }
.let { FirebaseCompositeEncoder(settings) { _, index, value -> it[index] = value } }
-private fun FirebaseEncoder.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = json()
+private fun FirebaseEncoderImpl.encodeAsMap(descriptor: SerialDescriptor): FirebaseCompositeEncoder = json()
.also { value = it }
.let {
FirebaseCompositeEncoder(
diff --git a/firebase-common/api/android/firebase-common.api b/firebase-common/api/android/firebase-common.api
index 2b70a6e8a..789d376fd 100644
--- a/firebase-common/api/android/firebase-common.api
+++ b/firebase-common/api/android/firebase-common.api
@@ -13,6 +13,11 @@ public abstract interface class dev/gitlive/firebase/EncodeDecodeSettings {
public abstract interface class dev/gitlive/firebase/EncodeDecodeSettingsBuilder : dev/gitlive/firebase/DecodeSettings$Builder, dev/gitlive/firebase/EncodeSettings$Builder {
}
+public final class dev/gitlive/firebase/EncodeDecodeSettingsKt {
+ public static final fun copyFrom (Ldev/gitlive/firebase/DecodeSettings$Builder;Ldev/gitlive/firebase/DecodeSettings$Builder;)V
+ public static final fun copyFrom (Ldev/gitlive/firebase/EncodeSettings$Builder;Ldev/gitlive/firebase/EncodeSettings$Builder;)V
+}
+
public abstract interface class dev/gitlive/firebase/EncodeSettings : dev/gitlive/firebase/EncodeDecodeSettings {
public abstract fun getEncodeDefaults ()Z
}
@@ -33,3 +38,21 @@ public synthetic class dev/gitlive/firebase/FirebaseClassDiscriminator$Impl : de
public final synthetic fun discriminator ()Ljava/lang/String;
}
+public abstract interface class dev/gitlive/firebase/FirebaseDecoder : kotlinx/serialization/encoding/Decoder {
+}
+
+public final class dev/gitlive/firebase/FirebaseDecoder$DefaultImpls {
+ public static fun decodeNullableSerializableValue (Ldev/gitlive/firebase/FirebaseDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
+ public static fun decodeSerializableValue (Ldev/gitlive/firebase/FirebaseDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
+}
+
+public abstract interface class dev/gitlive/firebase/FirebaseEncoder : kotlinx/serialization/encoding/Encoder {
+}
+
+public final class dev/gitlive/firebase/FirebaseEncoder$DefaultImpls {
+ public static fun beginCollection (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
+ public static fun encodeNotNullMark (Ldev/gitlive/firebase/FirebaseEncoder;)V
+ public static fun encodeNullableSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public static fun encodeSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+}
+
diff --git a/firebase-common/api/jvm/firebase-common.api b/firebase-common/api/jvm/firebase-common.api
index 2b70a6e8a..789d376fd 100644
--- a/firebase-common/api/jvm/firebase-common.api
+++ b/firebase-common/api/jvm/firebase-common.api
@@ -13,6 +13,11 @@ public abstract interface class dev/gitlive/firebase/EncodeDecodeSettings {
public abstract interface class dev/gitlive/firebase/EncodeDecodeSettingsBuilder : dev/gitlive/firebase/DecodeSettings$Builder, dev/gitlive/firebase/EncodeSettings$Builder {
}
+public final class dev/gitlive/firebase/EncodeDecodeSettingsKt {
+ public static final fun copyFrom (Ldev/gitlive/firebase/DecodeSettings$Builder;Ldev/gitlive/firebase/DecodeSettings$Builder;)V
+ public static final fun copyFrom (Ldev/gitlive/firebase/EncodeSettings$Builder;Ldev/gitlive/firebase/EncodeSettings$Builder;)V
+}
+
public abstract interface class dev/gitlive/firebase/EncodeSettings : dev/gitlive/firebase/EncodeDecodeSettings {
public abstract fun getEncodeDefaults ()Z
}
@@ -33,3 +38,21 @@ public synthetic class dev/gitlive/firebase/FirebaseClassDiscriminator$Impl : de
public final synthetic fun discriminator ()Ljava/lang/String;
}
+public abstract interface class dev/gitlive/firebase/FirebaseDecoder : kotlinx/serialization/encoding/Decoder {
+}
+
+public final class dev/gitlive/firebase/FirebaseDecoder$DefaultImpls {
+ public static fun decodeNullableSerializableValue (Ldev/gitlive/firebase/FirebaseDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
+ public static fun decodeSerializableValue (Ldev/gitlive/firebase/FirebaseDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
+}
+
+public abstract interface class dev/gitlive/firebase/FirebaseEncoder : kotlinx/serialization/encoding/Encoder {
+}
+
+public final class dev/gitlive/firebase/FirebaseEncoder$DefaultImpls {
+ public static fun beginCollection (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
+ public static fun encodeNotNullMark (Ldev/gitlive/firebase/FirebaseEncoder;)V
+ public static fun encodeNullableSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public static fun encodeSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+}
+
diff --git a/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/EncodeDecodeSettings.kt b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/EncodeDecodeSettings.kt
index d73b9ede0..23f8456cc 100644
--- a/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/EncodeDecodeSettings.kt
+++ b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/EncodeDecodeSettings.kt
@@ -27,6 +27,11 @@ public interface EncodeSettings : EncodeDecodeSettings {
}
}
+public fun EncodeSettings.Builder.copyFrom(other: EncodeSettings.Builder) {
+ encodeDefaults = other.encodeDefaults
+ serializersModule = other.serializersModule
+}
+
/**
* [EncodeDecodeSettings] used when decoding an object
* @param serializersModule the [SerializersModule] to use for deserialization. This allows for polymorphic serialization on runtime
@@ -38,6 +43,10 @@ public interface DecodeSettings : EncodeDecodeSettings {
}
}
+public fun DecodeSettings.Builder.copyFrom(other: DecodeSettings.Builder) {
+ serializersModule = other.serializersModule
+}
+
public interface EncodeDecodeSettingsBuilder :
EncodeSettings.Builder,
DecodeSettings.Builder
diff --git a/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseDecoder.kt b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseDecoder.kt
new file mode 100644
index 000000000..2dbf07b44
--- /dev/null
+++ b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseDecoder.kt
@@ -0,0 +1,5 @@
+package dev.gitlive.firebase
+
+import kotlinx.serialization.encoding.Decoder
+
+public interface FirebaseDecoder : Decoder
diff --git a/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseEncoder.kt b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseEncoder.kt
new file mode 100644
index 000000000..f33f69fbb
--- /dev/null
+++ b/firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/FirebaseEncoder.kt
@@ -0,0 +1,5 @@
+package dev.gitlive.firebase
+
+import kotlinx.serialization.encoding.Encoder
+
+public interface FirebaseEncoder : Encoder
diff --git a/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt b/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt
index db1f7f344..e393d118b 100644
--- a/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt
+++ b/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt
@@ -1,7 +1,7 @@
package dev.gitlive.firebase.database
-import dev.gitlive.firebase.internal.FirebaseDecoder
-import dev.gitlive.firebase.internal.FirebaseEncoder
+import dev.gitlive.firebase.FirebaseEncoder
+import dev.gitlive.firebase.FirebaseDecoder
import dev.gitlive.firebase.internal.SpecialValueSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
diff --git a/firebase-firestore/api/android/firebase-firestore.api b/firebase-firestore/api/android/firebase-firestore.api
index 8a0aa2e9a..acdfb6336 100644
--- a/firebase-firestore/api/android/firebase-firestore.api
+++ b/firebase-firestore/api/android/firebase-firestore.api
@@ -72,12 +72,11 @@ public final class dev/gitlive/firebase/firestore/DocumentReference {
public final fun update (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun updateEncoded (Ldev/gitlive/firebase/internal/EncodedObject;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public final fun updateEncodedFieldPathsAndValues (Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public final fun updateEncodedFieldsAndValues (Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+ public final fun updateFieldPaths ([Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun updateFieldPaths ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public static synthetic fun updateFieldPaths$default (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+ public final fun updateFields (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+ public final fun updateFields ([Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun updateFields ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public static synthetic fun updateFields$default (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
}
public final class dev/gitlive/firebase/firestore/DocumentReference$Companion {
@@ -170,6 +169,29 @@ public final class dev/gitlive/firebase/firestore/FieldValueSerializer : kotlinx
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
+public final class dev/gitlive/firebase/firestore/FieldValuesDSL : dev/gitlive/firebase/EncodeSettings$Builder {
+ public final fun addWithStrategy (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public fun getEncodeDefaults ()Z
+ public final fun getFieldValuesToAdd ()Ljava/util/List;
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun withEncodeSettings (Lkotlin/jvm/functions/Function1;)V
+}
+
+public final class dev/gitlive/firebase/firestore/FieldsAndValuesUpdateDSL : dev/gitlive/firebase/EncodeSettings$Builder {
+ public fun getEncodeDefaults ()Z
+ public final fun getFieldAndValueToAdd ()Ljava/util/List;
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun to (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public final fun to (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public final fun toEncoded (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/internal/FieldAndValue$WithFieldPath;
+ public final fun toEncoded (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/internal/FieldAndValue$WithStringField;
+ public final fun withEncodeSettings (Lkotlin/jvm/functions/Function1;)V
+}
+
public abstract class dev/gitlive/firebase/firestore/Filter {
}
@@ -182,6 +204,7 @@ public final class dev/gitlive/firebase/firestore/Filter$And : dev/gitlive/fireb
}
public final class dev/gitlive/firebase/firestore/Filter$Field : dev/gitlive/firebase/firestore/Filter$WithConstraint {
+ public fun (Ljava/lang/String;Ldev/gitlive/firebase/firestore/WhereConstraint;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ldev/gitlive/firebase/firestore/WhereConstraint;
public fun equals (Ljava/lang/Object;)Z
@@ -200,6 +223,7 @@ public final class dev/gitlive/firebase/firestore/Filter$Or : dev/gitlive/fireba
}
public final class dev/gitlive/firebase/firestore/Filter$Path : dev/gitlive/firebase/firestore/Filter$WithConstraint {
+ public fun (Ldev/gitlive/firebase/firestore/FieldPath;Ldev/gitlive/firebase/firestore/WhereConstraint;)V
public final fun component1 ()Ldev/gitlive/firebase/firestore/FieldPath;
public final fun component2 ()Ldev/gitlive/firebase/firestore/WhereConstraint;
public fun equals (Ljava/lang/Object;)Z
@@ -213,31 +237,40 @@ public abstract class dev/gitlive/firebase/firestore/Filter$WithConstraint : dev
public abstract fun getConstraint ()Ldev/gitlive/firebase/firestore/WhereConstraint;
}
-public final class dev/gitlive/firebase/firestore/FilterBuilder {
+public final class dev/gitlive/firebase/firestore/FilterBuilder : dev/gitlive/firebase/EncodeSettings$Builder {
public final fun all ([Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter;
public final fun and (Ldev/gitlive/firebase/firestore/Filter;Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter$And;
public final fun any ([Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter;
- public final fun contains (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun contains (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun containsAny (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun containsAny (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun equalTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun equalTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThan (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThan (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThanOrEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun inArray (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun inArray (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThan (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThan (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThanOrEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notInArray (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notInArray (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun contains (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun contains (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun containsAny (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun containsAny (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun equalTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun equalTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public fun getEncodeDefaults ()Z
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public final fun greaterThan (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThan (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThanOrEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun inArray (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun inArray (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNotNull (Ldev/gitlive/firebase/firestore/FieldPath;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNotNull (Ljava/lang/String;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNull (Ldev/gitlive/firebase/firestore/FieldPath;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNull (Ljava/lang/String;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThan (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThan (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThanOrEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notInArray (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notInArray (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
public final fun or (Ldev/gitlive/firebase/firestore/Filter;Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter$Or;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun withEncoder (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Filter;
}
public final class dev/gitlive/firebase/firestore/FirebaseFirestore {
@@ -333,12 +366,6 @@ public final class dev/gitlive/firebase/firestore/GeoPointSerializer : kotlinx/s
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
-public final class dev/gitlive/firebase/firestore/HelpersKt {
- public static final fun encodeFieldAndValue ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
- public static final fun performUpdateFieldPaths ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
- public static final fun performUpdateFields ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/LocalCacheSettings {
}
@@ -425,8 +452,12 @@ public class dev/gitlive/firebase/firestore/Query {
public static final field Companion Ldev/gitlive/firebase/firestore/Query$Companion;
public final fun endAt (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun endAt ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endAt ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endAtFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun endBefore (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun endBefore ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endBefore ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endBeforeFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun get (Ldev/gitlive/firebase/firestore/Source;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun get$default (Ldev/gitlive/firebase/firestore/Query;Ldev/gitlive/firebase/firestore/Source;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun getSnapshots ()Lkotlinx/coroutines/flow/Flow;
@@ -439,8 +470,12 @@ public class dev/gitlive/firebase/firestore/Query {
public static synthetic fun snapshots$default (Ldev/gitlive/firebase/firestore/Query;ZILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
public final fun startAfter (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAfter ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAfter ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAfterFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAt (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAt ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAt ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAtFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun where (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
}
@@ -561,12 +596,11 @@ public final class dev/gitlive/firebase/firestore/Transaction {
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateEncoded (Ldev/gitlive/firebase/firestore/DocumentReference;Ldev/gitlive/firebase/internal/EncodedObject;)Ldev/gitlive/firebase/firestore/Transaction;
- public final fun updateEncodedFieldPathsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Transaction;
- public final fun updateEncodedFieldsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFieldPaths (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateFieldPaths (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
- public static synthetic fun updateFieldPaths$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
- public static synthetic fun updateFields$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
}
public final class dev/gitlive/firebase/firestore/Transaction$Companion {
@@ -576,117 +610,92 @@ public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint {
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$ArrayContains : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$ArrayContainsAny : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$EqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForArray : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValues ()Ljava/util/List;
public abstract fun getValues ()Ljava/util/List;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForArray$DefaultImpls {
- public static fun getSafeValues (Ldev/gitlive/firebase/firestore/WhereConstraint$ForArray;)Ljava/util/List;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValue ()Ljava/lang/Object;
public abstract fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject$DefaultImpls {
- public static fun getSafeValue (Ldev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject;)Ljava/lang/Object;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForObject : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValue ()Ljava/lang/Object;
public abstract fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForObject$DefaultImpls {
- public static fun getSafeValue (Ldev/gitlive/firebase/firestore/WhereConstraint$ForObject;)Ljava/lang/Object;
-}
-
public final class dev/gitlive/firebase/firestore/WhereConstraint$GreaterThan : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$GreaterThanOrEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$InArray : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$LessThan : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$LessThanOrEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$NotEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$NotInArray : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
@@ -714,12 +723,11 @@ public final class dev/gitlive/firebase/firestore/WriteBatch {
public final fun update (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Z)Ldev/gitlive/firebase/firestore/WriteBatch;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateEncoded (Ldev/gitlive/firebase/firestore/DocumentReference;Ldev/gitlive/firebase/internal/EncodedObject;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public final fun updateEncodedFieldPathsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public final fun updateEncodedFieldsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateField (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateField (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public static synthetic fun updateField$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateFieldPath (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateFieldPath (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public static synthetic fun updateFieldPath$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
}
public final class dev/gitlive/firebase/firestore/WriteBatch$Companion {
diff --git a/firebase-firestore/api/jvm/firebase-firestore.api b/firebase-firestore/api/jvm/firebase-firestore.api
index 33a64aef7..1019894f5 100644
--- a/firebase-firestore/api/jvm/firebase-firestore.api
+++ b/firebase-firestore/api/jvm/firebase-firestore.api
@@ -72,12 +72,11 @@ public final class dev/gitlive/firebase/firestore/DocumentReference {
public final fun update (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun updateEncoded (Ldev/gitlive/firebase/internal/EncodedObject;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public final fun updateEncodedFieldPathsAndValues (Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public final fun updateEncodedFieldsAndValues (Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+ public final fun updateFieldPaths ([Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun updateFieldPaths ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public static synthetic fun updateFieldPaths$default (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+ public final fun updateFields (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+ public final fun updateFields ([Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun updateFields ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
- public static synthetic fun updateFields$default (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
}
public final class dev/gitlive/firebase/firestore/DocumentReference$Companion {
@@ -170,6 +169,29 @@ public final class dev/gitlive/firebase/firestore/FieldValueSerializer : kotlinx
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
+public final class dev/gitlive/firebase/firestore/FieldValuesDSL : dev/gitlive/firebase/EncodeSettings$Builder {
+ public final fun addWithStrategy (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public fun getEncodeDefaults ()Z
+ public final fun getFieldValuesToAdd ()Ljava/util/List;
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun withEncodeSettings (Lkotlin/jvm/functions/Function1;)V
+}
+
+public final class dev/gitlive/firebase/firestore/FieldsAndValuesUpdateDSL : dev/gitlive/firebase/EncodeSettings$Builder {
+ public fun getEncodeDefaults ()Z
+ public final fun getFieldAndValueToAdd ()Ljava/util/List;
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun to (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public final fun to (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
+ public final fun toEncoded (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/internal/FieldAndValue$WithFieldPath;
+ public final fun toEncoded (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/internal/FieldAndValue$WithStringField;
+ public final fun withEncodeSettings (Lkotlin/jvm/functions/Function1;)V
+}
+
public abstract class dev/gitlive/firebase/firestore/Filter {
}
@@ -182,6 +204,7 @@ public final class dev/gitlive/firebase/firestore/Filter$And : dev/gitlive/fireb
}
public final class dev/gitlive/firebase/firestore/Filter$Field : dev/gitlive/firebase/firestore/Filter$WithConstraint {
+ public fun (Ljava/lang/String;Ldev/gitlive/firebase/firestore/WhereConstraint;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ldev/gitlive/firebase/firestore/WhereConstraint;
public fun equals (Ljava/lang/Object;)Z
@@ -200,6 +223,7 @@ public final class dev/gitlive/firebase/firestore/Filter$Or : dev/gitlive/fireba
}
public final class dev/gitlive/firebase/firestore/Filter$Path : dev/gitlive/firebase/firestore/Filter$WithConstraint {
+ public fun (Ldev/gitlive/firebase/firestore/FieldPath;Ldev/gitlive/firebase/firestore/WhereConstraint;)V
public final fun component1 ()Ldev/gitlive/firebase/firestore/FieldPath;
public final fun component2 ()Ldev/gitlive/firebase/firestore/WhereConstraint;
public fun equals (Ljava/lang/Object;)Z
@@ -213,31 +237,40 @@ public abstract class dev/gitlive/firebase/firestore/Filter$WithConstraint : dev
public abstract fun getConstraint ()Ldev/gitlive/firebase/firestore/WhereConstraint;
}
-public final class dev/gitlive/firebase/firestore/FilterBuilder {
+public final class dev/gitlive/firebase/firestore/FilterBuilder : dev/gitlive/firebase/EncodeSettings$Builder {
public final fun all ([Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter;
public final fun and (Ldev/gitlive/firebase/firestore/Filter;Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter$And;
public final fun any ([Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter;
- public final fun contains (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun contains (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun containsAny (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun containsAny (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun equalTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun equalTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThan (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThan (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun greaterThanOrEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun inArray (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun inArray (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThan (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThan (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun lessThanOrEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notEqualTo (Ljava/lang/String;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notInArray (Ldev/gitlive/firebase/firestore/FieldPath;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
- public final fun notInArray (Ljava/lang/String;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun contains (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun contains (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun containsAny (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun containsAny (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun equalTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun equalTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public fun getEncodeDefaults ()Z
+ public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
+ public final fun greaterThan (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThan (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun greaterThanOrEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun inArray (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun inArray (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNotNull (Ldev/gitlive/firebase/firestore/FieldPath;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNotNull (Ljava/lang/String;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNull (Ldev/gitlive/firebase/firestore/FieldPath;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun isNull (Ljava/lang/String;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThan (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThan (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThanOrEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun lessThanOrEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notEqualTo (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notEqualTo (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notInArray (Ldev/gitlive/firebase/firestore/FieldPath;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
+ public final fun notInArray (Ljava/lang/String;Lkotlinx/serialization/SerializationStrategy;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Filter$WithConstraint;
public final fun or (Ldev/gitlive/firebase/firestore/Filter;Ldev/gitlive/firebase/firestore/Filter;)Ldev/gitlive/firebase/firestore/Filter$Or;
+ public fun setEncodeDefaults (Z)V
+ public fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
+ public final fun withEncoder (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Filter;
}
public final class dev/gitlive/firebase/firestore/FirebaseFirestore {
@@ -333,12 +366,6 @@ public final class dev/gitlive/firebase/firestore/GeoPointSerializer : kotlinx/s
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
-public final class dev/gitlive/firebase/firestore/HelpersKt {
- public static final fun encodeFieldAndValue ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
- public static final fun performUpdateFieldPaths ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
- public static final fun performUpdateFields ([Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ljava/util/List;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/LocalCacheSettings {
}
@@ -425,8 +452,12 @@ public class dev/gitlive/firebase/firestore/Query {
public static final field Companion Ldev/gitlive/firebase/firestore/Query$Companion;
public final fun endAt (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun endAt ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endAt ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endAtFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun endBefore (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun endBefore ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endBefore ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun endBeforeFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun get (Ldev/gitlive/firebase/firestore/Source;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun get$default (Ldev/gitlive/firebase/firestore/Query;Ldev/gitlive/firebase/firestore/Source;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun getSnapshots ()Lkotlinx/coroutines/flow/Flow;
@@ -439,8 +470,12 @@ public class dev/gitlive/firebase/firestore/Query {
public static synthetic fun snapshots$default (Ldev/gitlive/firebase/firestore/Query;ZILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
public final fun startAfter (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAfter ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAfter ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAfterFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAt (Ldev/gitlive/firebase/firestore/DocumentSnapshot;)Ldev/gitlive/firebase/firestore/Query;
public final fun startAt ([Ljava/lang/Object;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAt ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
+ public final fun startAtFieldValues (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
public final fun where (Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Query;
}
@@ -561,12 +596,11 @@ public final class dev/gitlive/firebase/firestore/Transaction {
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateEncoded (Ldev/gitlive/firebase/firestore/DocumentReference;Ldev/gitlive/firebase/internal/EncodedObject;)Ldev/gitlive/firebase/firestore/Transaction;
- public final fun updateEncodedFieldPathsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Transaction;
- public final fun updateEncodedFieldsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFieldPaths (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateFieldPaths (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
- public static synthetic fun updateFieldPaths$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/Transaction;
public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/Transaction;
- public static synthetic fun updateFields$default (Ldev/gitlive/firebase/firestore/Transaction;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/Transaction;
}
public final class dev/gitlive/firebase/firestore/Transaction$Companion {
@@ -576,117 +610,92 @@ public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint {
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$ArrayContains : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$ArrayContainsAny : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$EqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForArray : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValues ()Ljava/util/List;
public abstract fun getValues ()Ljava/util/List;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForArray$DefaultImpls {
- public static fun getSafeValues (Ldev/gitlive/firebase/firestore/WhereConstraint$ForArray;)Ljava/util/List;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValue ()Ljava/lang/Object;
public abstract fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject$DefaultImpls {
- public static fun getSafeValue (Ldev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject;)Ljava/lang/Object;
-}
-
public abstract interface class dev/gitlive/firebase/firestore/WhereConstraint$ForObject : dev/gitlive/firebase/firestore/WhereConstraint {
- public abstract fun getSafeValue ()Ljava/lang/Object;
public abstract fun getValue ()Ljava/lang/Object;
}
-public final class dev/gitlive/firebase/firestore/WhereConstraint$ForObject$DefaultImpls {
- public static fun getSafeValue (Ldev/gitlive/firebase/firestore/WhereConstraint$ForObject;)Ljava/lang/Object;
-}
-
public final class dev/gitlive/firebase/firestore/WhereConstraint$GreaterThan : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$GreaterThanOrEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$InArray : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$LessThan : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$LessThanOrEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$NotEqualTo : dev/gitlive/firebase/firestore/WhereConstraint$ForNullableObject {
- public final fun component1 ()Ljava/lang/Object;
+ public fun (Lkotlin/jvm/functions/Function0;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValue ()Ljava/lang/Object;
public fun getValue ()Ljava/lang/Object;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class dev/gitlive/firebase/firestore/WhereConstraint$NotInArray : dev/gitlive/firebase/firestore/WhereConstraint$ForArray {
- public final fun component1 ()Ljava/util/List;
+ public fun (Ljava/util/List;)V
public fun equals (Ljava/lang/Object;)Z
- public fun getSafeValues ()Ljava/util/List;
public fun getValues ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
@@ -714,12 +723,11 @@ public final class dev/gitlive/firebase/firestore/WriteBatch {
public final fun update (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Z)Ldev/gitlive/firebase/firestore/WriteBatch;
public static synthetic fun update$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateEncoded (Ldev/gitlive/firebase/firestore/DocumentReference;Ldev/gitlive/firebase/internal/EncodedObject;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public final fun updateEncodedFieldPathsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public final fun updateEncodedFieldsAndValues (Ldev/gitlive/firebase/firestore/DocumentReference;Ljava/util/List;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateField (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateField (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public static synthetic fun updateField$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateFieldPath (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;)Ldev/gitlive/firebase/firestore/WriteBatch;
public final fun updateFieldPath (Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
- public static synthetic fun updateFieldPath$default (Ldev/gitlive/firebase/firestore/WriteBatch;Ldev/gitlive/firebase/firestore/DocumentReference;[Lkotlin/Pair;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/WriteBatch;
+ public final fun updateFields (Ldev/gitlive/firebase/firestore/DocumentReference;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/WriteBatch;
}
public final class dev/gitlive/firebase/firestore/WriteBatch$Companion {
diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt
index cb91ffd74..2cc2047a0 100644
--- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt
+++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt
@@ -2,7 +2,6 @@ package dev.gitlive.firebase.firestore.internal
import com.google.android.gms.tasks.TaskExecutors
import com.google.firebase.firestore.MetadataChanges
-import dev.gitlive.firebase.firestore.EncodedFieldPath
import dev.gitlive.firebase.firestore.NativeDocumentReferenceType
import dev.gitlive.firebase.firestore.NativeDocumentSnapshot
import dev.gitlive.firebase.firestore.Source
@@ -44,19 +43,12 @@ internal actual class NativeDocumentReference actual constructor(actual val nati
android.update(encodedData.android).await()
}
- actual suspend fun updateEncodedFieldsAndValues(encodedFieldsAndValues: List>) {
+ actual suspend fun updateEncoded(encodedFieldsAndValues: List) {
encodedFieldsAndValues.takeUnless { encodedFieldsAndValues.isEmpty() }?.let {
- android.update(encodedFieldsAndValues.toMap())
+ encodedFieldsAndValues.performUpdate(android::update, android::update)
}?.await()
}
- actual suspend fun updateEncodedFieldPathsAndValues(encodedFieldsAndValues: List>) {
- encodedFieldsAndValues.takeUnless { encodedFieldsAndValues.isEmpty() }
- ?.performUpdate { field, value, moreFieldsAndValues ->
- android.update(field, value, *moreFieldsAndValues)
- }?.await()
- }
-
actual suspend fun delete() {
android.delete().await()
}
diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt
index 5dc17f72b..7505e09ef 100644
--- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt
+++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt
@@ -59,7 +59,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.EqualTo -> com.google.firebase.firestore.Filter::equalTo
is WhereConstraint.NotEqualTo -> com.google.firebase.firestore.Filter::notEqualTo
}
- modifier.invoke(field, constraint.safeValue)
+ modifier.invoke(field, constraint.value)
}
is WhereConstraint.ForObject -> {
val modifier: (String, Any) -> com.google.firebase.firestore.Filter = when (constraint) {
@@ -69,7 +69,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.GreaterThanOrEqualTo -> com.google.firebase.firestore.Filter::greaterThanOrEqualTo
is WhereConstraint.ArrayContains -> com.google.firebase.firestore.Filter::arrayContains
}
- modifier.invoke(field, constraint.safeValue)
+ modifier.invoke(field, constraint.value)
}
is WhereConstraint.ForArray -> {
val modifier: (String, List) -> com.google.firebase.firestore.Filter = when (constraint) {
@@ -77,7 +77,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.ArrayContainsAny -> com.google.firebase.firestore.Filter::arrayContainsAny
is WhereConstraint.NotInArray -> com.google.firebase.firestore.Filter::notInArray
}
- modifier.invoke(field, constraint.safeValues)
+ modifier.invoke(field, constraint.values)
}
}
}
@@ -88,7 +88,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.EqualTo -> com.google.firebase.firestore.Filter::equalTo
is WhereConstraint.NotEqualTo -> com.google.firebase.firestore.Filter::notEqualTo
}
- modifier.invoke(path.android, constraint.safeValue)
+ modifier.invoke(path.android, constraint.value)
}
is WhereConstraint.ForObject -> {
val modifier: (FieldPath, Any) -> com.google.firebase.firestore.Filter = when (constraint) {
@@ -98,7 +98,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.GreaterThanOrEqualTo -> com.google.firebase.firestore.Filter::greaterThanOrEqualTo
is WhereConstraint.ArrayContains -> com.google.firebase.firestore.Filter::arrayContains
}
- modifier.invoke(path.android, constraint.safeValue)
+ modifier.invoke(path.android, constraint.value)
}
is WhereConstraint.ForArray -> {
val modifier: (FieldPath, List) -> com.google.firebase.firestore.Filter = when (constraint) {
@@ -106,7 +106,7 @@ internal actual open class NativeQueryWrapper internal actual constructor(actual
is WhereConstraint.ArrayContainsAny -> com.google.firebase.firestore.Filter::arrayContainsAny
is WhereConstraint.NotInArray -> com.google.firebase.firestore.Filter::notInArray
}
- modifier.invoke(path.android, constraint.safeValues)
+ modifier.invoke(path.android, constraint.values)
}
}
}
diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt
index 4b8219703..ea20d3f33 100644
--- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt
+++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt
@@ -1,7 +1,6 @@
package dev.gitlive.firebase.firestore.internal
import dev.gitlive.firebase.firestore.DocumentReference
-import dev.gitlive.firebase.firestore.EncodedFieldPath
import dev.gitlive.firebase.firestore.NativeTransaction
import dev.gitlive.firebase.firestore.android
import dev.gitlive.firebase.firestore.performUpdate
@@ -23,19 +22,17 @@ internal actual class NativeTransactionWrapper internal actual constructor(actua
actual fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject) = native.update(documentRef.android, encodedData.android).let { this }
- actual fun updateEncodedFieldsAndValues(
+ actual fun updateEncoded(
documentRef: DocumentReference,
- encodedFieldsAndValues: List>,
- ) = encodedFieldsAndValues.performUpdate { field, value, moreFieldsAndValues ->
- native.update(documentRef.android, field, value, *moreFieldsAndValues)
- }.let { this }
-
- actual fun updateEncodedFieldPathsAndValues(
- documentRef: DocumentReference,
- encodedFieldsAndValues: List>,
- ) = encodedFieldsAndValues.performUpdate { field, value, moreFieldsAndValues ->
- native.update(documentRef.android, field, value, *moreFieldsAndValues)
- }.let { this }
+ encodedFieldsAndValues: List,
+ ) = encodedFieldsAndValues.performUpdate(
+ updateAsField = { field, value, moreFieldsAndValues ->
+ native.update(documentRef.android, field, value, *moreFieldsAndValues)
+ },
+ updateAsFieldPath = { fieldPath, value, moreFieldsAndValues ->
+ native.update(documentRef.android, fieldPath, value, *moreFieldsAndValues)
+ },
+ ).let { this }
actual fun delete(documentRef: DocumentReference) =
native.delete(documentRef.android).let { this }
diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt
index 9aa34f700..1a3bd69b9 100644
--- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt
+++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt
@@ -1,7 +1,6 @@
package dev.gitlive.firebase.firestore.internal
import dev.gitlive.firebase.firestore.DocumentReference
-import dev.gitlive.firebase.firestore.EncodedFieldPath
import dev.gitlive.firebase.firestore.NativeWriteBatch
import dev.gitlive.firebase.firestore.android
import dev.gitlive.firebase.firestore.performUpdate
@@ -25,19 +24,17 @@ internal actual class NativeWriteBatchWrapper internal actual constructor(actual
actual fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject) = native.update(documentRef.android, encodedData.android).let { this }
- actual fun updateEncodedFieldsAndValues(
+ actual fun updateEncoded(
documentRef: DocumentReference,
- encodedFieldsAndValues: List>,
- ) = encodedFieldsAndValues.performUpdate { field, value, moreFieldsAndValues ->
- native.update(documentRef.android, field, value, *moreFieldsAndValues)
- }.let { this }
-
- actual fun updateEncodedFieldPathsAndValues(
- documentRef: DocumentReference,
- encodedFieldsAndValues: List>,
- ) = encodedFieldsAndValues.performUpdate { field, value, moreFieldsAndValues ->
- native.update(documentRef.android, field, value, *moreFieldsAndValues)
- }.let { this }
+ encodedFieldsAndValues: List,
+ ) = encodedFieldsAndValues.performUpdate(
+ updateAsField = { field, value, moreFieldsAndValues ->
+ native.update(documentRef.android, field, value, *moreFieldsAndValues)
+ },
+ updateAsFieldPath = { fieldPath, value, moreFieldsAndValues ->
+ native.update(documentRef.android, fieldPath, value, *moreFieldsAndValues)
+ },
+ ).let { this }
actual fun delete(documentRef: DocumentReference) =
native.delete(documentRef.android).let { this }
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/DocumentReferenceSerializer.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/DocumentReferenceSerializer.kt
index 945230bc7..10fa9341f 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/DocumentReferenceSerializer.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/DocumentReferenceSerializer.kt
@@ -1,7 +1,7 @@
package dev.gitlive.firebase.firestore
+import dev.gitlive.firebase.FirebaseEncoder
import dev.gitlive.firebase.firestore.internal.NativeDocumentReference
-import dev.gitlive.firebase.internal.FirebaseEncoder
import dev.gitlive.firebase.internal.SpecialValueSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValueSerializer.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValueSerializer.kt
index 561dcb201..d2717474d 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValueSerializer.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValueSerializer.kt
@@ -1,6 +1,6 @@
package dev.gitlive.firebase.firestore
-import dev.gitlive.firebase.internal.FirebaseEncoder
+import dev.gitlive.firebase.FirebaseEncoder
import dev.gitlive.firebase.internal.SpecialValueSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValuesDSL.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValuesDSL.kt
new file mode 100644
index 000000000..7c1f4d4a7
--- /dev/null
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldValuesDSL.kt
@@ -0,0 +1,60 @@
+package dev.gitlive.firebase.firestore
+
+import dev.gitlive.firebase.EncodeSettings
+import dev.gitlive.firebase.copyFrom
+import kotlinx.serialization.SerializationStrategy
+import kotlinx.serialization.modules.EmptySerializersModule
+import kotlinx.serialization.modules.SerializersModule
+
+/**
+ * A builder for generating the field values of a [Query].
+ * The order of the field values must match the order by clauses of the [Query]
+ */
+public class FieldValuesDSL internal constructor() : EncodeSettings.Builder {
+
+ override var encodeDefaults: Boolean = true
+ override var serializersModule: SerializersModule = EmptySerializersModule()
+
+ @PublishedApi
+ internal val fieldValuesToAdd: MutableList<() -> Any> = mutableListOf()
+ internal val fieldValues get() = fieldValuesToAdd.map { valueToEncode ->
+ valueToEncode.invoke()
+ }
+
+ /**
+ * Adds a field value to the [Query]
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value to add
+ * @param value the value [T] to add
+ */
+ public inline fun add(value: T) {
+ fieldValuesToAdd.add {
+ encode(value, { copyFrom(this@FieldValuesDSL) })!!
+ }
+ }
+
+ /**
+ * Adds a field value to the [Query]
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value to add
+ * @param strategy the [SerializationStrategy] to apply to the value
+ * @param value the value [T] to add
+ */
+ public fun addWithStrategy(strategy: SerializationStrategy, value: T) {
+ fieldValuesToAdd.add {
+ dev.gitlive.firebase.internal.encode(strategy, value, { copyFrom(this@FieldValuesDSL) })!!
+ }
+ }
+
+ /**
+ * Provides an accessor for encoding values with [EncodeSettings]
+ * @param dls the [FieldValuesDSL] to specify the [EncodeSettings] and values to add
+ */
+ public fun withEncodeSettings(dls: FieldValuesDSL.() -> Unit) {
+ fieldValuesToAdd.addAll(
+ FieldValuesDSL()
+ .apply { copyFrom(this@FieldValuesDSL) }
+ .apply(dls).fieldValuesToAdd,
+ )
+ }
+}
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldsAndValuesUpdateDSL.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldsAndValuesUpdateDSL.kt
new file mode 100644
index 000000000..5ea2ae37d
--- /dev/null
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FieldsAndValuesUpdateDSL.kt
@@ -0,0 +1,104 @@
+package dev.gitlive.firebase.firestore
+
+import dev.gitlive.firebase.EncodeSettings
+import dev.gitlive.firebase.copyFrom
+import dev.gitlive.firebase.firestore.internal.FieldAndValue
+import kotlinx.serialization.SerializationStrategy
+import kotlinx.serialization.modules.EmptySerializersModule
+import kotlinx.serialization.modules.SerializersModule
+
+/**
+ * A builder for generating a collection of updates to a document.
+ * Updates can be applied to either a String field or to a [FieldPath].
+ * Within this builder custom serialization can be applied to the update.
+ *
+ * ```
+ * val update: FieldsAndValuesUpdateBuilder.() -> Unit = {
+ * "path" to 1
+ * FieldPath("subpath", "field") to "value"
+ * "otherPath".to(strategy, value)
+ * }
+ * ```
+ */
+public class FieldsAndValuesUpdateDSL internal constructor() : EncodeSettings.Builder {
+
+ override var encodeDefaults: Boolean = true
+ override var serializersModule: SerializersModule = EmptySerializersModule()
+
+ @PublishedApi
+ internal val fieldAndValueToAdd: MutableList<() -> FieldAndValue> = mutableListOf()
+ internal val fieldsAndValues: List get() = fieldAndValueToAdd.map { fieldAndValueToEncode ->
+ fieldAndValueToEncode.invoke()
+ }
+
+ /**
+ * Updates the field represented by a String to a given value
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value
+ * @param value the value [T] to update to
+ */
+ public inline infix fun String.to(value: T) {
+ fieldAndValueToAdd.add {
+ toEncoded(encode(value, { copyFrom(this@FieldsAndValuesUpdateDSL) }))
+ }
+ }
+
+ /**
+ * Updates a [FieldPath] to a given value
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value
+ * @param value the value [T] to update to
+ */
+ public inline infix fun FieldPath.to(value: T) {
+ fieldAndValueToAdd.add {
+ toEncoded(encode(value, { copyFrom(this@FieldsAndValuesUpdateDSL) }))
+ }
+ }
+
+ /**
+ * Updates the field represented by a String to a given value
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value
+ * @param strategy the [SerializationStrategy] to apply to the value
+ * @param value the value [T] to update to
+ */
+ public fun String.to(strategy: SerializationStrategy, value: T) {
+ fieldAndValueToAdd.add {
+ toEncoded(dev.gitlive.firebase.internal.encode(strategy, value, { copyFrom(this@FieldsAndValuesUpdateDSL) }))
+ }
+ }
+
+ /**
+ * Updates a [FieldPath] to a given value
+ * The [value] will be encoded according to the [EncodeSettings] set by this builder.
+ * @param T the type of the value
+ * @param strategy the [SerializationStrategy] to apply to the value
+ * @param value the value [T] to update to
+ */
+ public fun FieldPath.to(strategy: SerializationStrategy, value: T) {
+ fieldAndValueToAdd.add {
+ toEncoded(dev.gitlive.firebase.internal.encode(strategy, value, { copyFrom(this@FieldsAndValuesUpdateDSL) }))
+ }
+ }
+
+ /**
+ * Provides an accessor for encoding values with [EncodeSettings]
+ * @param dls the [WithEncoder] to specify the [EncodeSettings] and values to add
+ */
+ public fun withEncodeSettings(dls: FieldsAndValuesUpdateDSL.() -> Unit) {
+ fieldAndValueToAdd.addAll(
+ FieldsAndValuesUpdateDSL()
+ .apply { copyFrom(this@FieldsAndValuesUpdateDSL) }
+ .apply(dls)
+ .fieldAndValueToAdd,
+ )
+ }
+
+ @PublishedApi
+ internal fun String.toEncoded(encodedValue: Any?): FieldAndValue.WithStringField =
+ FieldAndValue.WithStringField(this, encodedValue)
+
+ @PublishedApi
+ internal fun FieldPath.toEncoded(encodedValue: Any?): FieldAndValue.WithFieldPath =
+ FieldAndValue.WithFieldPath(this, encodedValue)
+}
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Filter.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Filter.kt
index f9e8558e7..ec745f517 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Filter.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Filter.kt
@@ -1,87 +1,372 @@
package dev.gitlive.firebase.firestore
-import dev.gitlive.firebase.firestore.internal.safeValue
+import dev.gitlive.firebase.EncodeSettings
+import dev.gitlive.firebase.copyFrom
+import kotlinx.serialization.SerializationStrategy
+import kotlinx.serialization.modules.EmptySerializersModule
+import kotlinx.serialization.modules.SerializersModule
public sealed interface WhereConstraint {
public sealed interface ForNullableObject : WhereConstraint {
public val value: Any?
- public val safeValue: Any? get() = value?.safeValue
}
public sealed interface ForObject : WhereConstraint {
public val value: Any
- public val safeValue: Any get() = value.safeValue
}
+
public sealed interface ForArray : WhereConstraint {
public val values: List
- public val safeValues: List get() = values.map { it.safeValue }
- }
-
- public data class EqualTo internal constructor(override val value: Any?) : ForNullableObject
- public data class NotEqualTo internal constructor(override val value: Any?) : ForNullableObject
- public data class LessThan internal constructor(override val value: Any) : ForObject
- public data class GreaterThan internal constructor(override val value: Any) : ForObject
- public data class LessThanOrEqualTo internal constructor(override val value: Any) : ForObject
- public data class GreaterThanOrEqualTo internal constructor(override val value: Any) : ForObject
- public data class ArrayContains internal constructor(override val value: Any) : ForObject
- public data class ArrayContainsAny internal constructor(override val values: List) : ForArray
- public data class InArray internal constructor(override val values: List) : ForArray
- public data class NotInArray internal constructor(override val values: List) : ForArray
-}
-
-public sealed class Filter {
- public data class And internal constructor(val filters: List) : Filter()
- public data class Or internal constructor(val filters: List) : Filter()
- public sealed class WithConstraint : Filter() {
- public abstract val constraint: WhereConstraint
}
- public data class Field internal constructor(val field: String, override val constraint: WhereConstraint) : WithConstraint()
- public data class Path internal constructor(val path: FieldPath, override val constraint: WhereConstraint) : WithConstraint()
-}
-
-public class FilterBuilder internal constructor() {
-
- public infix fun String.equalTo(value: Any?): Filter.WithConstraint = Filter.Field(this, WhereConstraint.EqualTo(value))
-
- public infix fun FieldPath.equalTo(value: Any?): Filter.WithConstraint = Filter.Path(this, WhereConstraint.EqualTo(value))
-
- public infix fun String.notEqualTo(value: Any?): Filter.WithConstraint = Filter.Field(this, WhereConstraint.NotEqualTo(value))
-
- public infix fun FieldPath.notEqualTo(value: Any?): Filter.WithConstraint = Filter.Path(this, WhereConstraint.NotEqualTo(value))
-
- public infix fun String.lessThan(value: Any): Filter.WithConstraint = Filter.Field(this, WhereConstraint.LessThan(value))
-
- public infix fun FieldPath.lessThan(value: Any): Filter.WithConstraint = Filter.Path(this, WhereConstraint.LessThan(value))
-
- public infix fun String.greaterThan(value: Any): Filter.WithConstraint = Filter.Field(this, WhereConstraint.GreaterThan(value))
-
- public infix fun FieldPath.greaterThan(value: Any): Filter.WithConstraint = Filter.Path(this, WhereConstraint.GreaterThan(value))
+ public data class EqualTo @PublishedApi internal constructor(private val valueBuilder: () -> Any?) : ForNullableObject {
+ override val value: Any? get() = valueBuilder()
+ }
- public infix fun String.lessThanOrEqualTo(value: Any): Filter.WithConstraint = Filter.Field(this, WhereConstraint.LessThanOrEqualTo(value))
+ public data class NotEqualTo @PublishedApi internal constructor(private val valueBuilder: () -> Any?) : ForNullableObject {
+ override val value: Any? get() = valueBuilder()
+ }
- public infix fun FieldPath.lessThanOrEqualTo(value: Any): Filter.WithConstraint = Filter.Path(this, WhereConstraint.LessThanOrEqualTo(value))
+ public data class LessThan @PublishedApi internal constructor(private val valueBuilder: () -> Any) : ForObject {
+ override val value: Any get() = valueBuilder()
+ }
- public infix fun String.greaterThanOrEqualTo(value: Any): Filter.WithConstraint = Filter.Field(this, WhereConstraint.GreaterThanOrEqualTo(value))
+ public data class GreaterThan @PublishedApi internal constructor(private val valueBuilder: () -> Any) : ForObject {
+ override val value: Any get() = valueBuilder()
+ }
- public infix fun FieldPath.greaterThanOrEqualTo(value: Any): Filter.WithConstraint = Filter.Path(this, WhereConstraint.GreaterThanOrEqualTo(value))
+ public data class LessThanOrEqualTo @PublishedApi internal constructor(private val valueBuilder: () -> Any) : ForObject {
+ override val value: Any get() = valueBuilder()
+ }
- public infix fun String.contains(value: Any): Filter.WithConstraint = Filter.Field(this, WhereConstraint.ArrayContains(value))
+ public data class GreaterThanOrEqualTo @PublishedApi internal constructor(private val valueBuilder: () -> Any) : ForObject {
+ override val value: Any get() = valueBuilder()
+ }
- public infix fun FieldPath.contains(value: Any): Filter.WithConstraint = Filter.Path(this, WhereConstraint.ArrayContains(value))
+ public data class ArrayContains @PublishedApi internal constructor(private val valueBuilder: () -> Any) : ForObject {
+ override val value: Any get() = valueBuilder()
+ }
- public infix fun String.containsAny(values: List): Filter.WithConstraint = Filter.Field(this, WhereConstraint.ArrayContainsAny(values))
+ public data class ArrayContainsAny @PublishedApi internal constructor(private val valueBuilders: List<() -> Any>) : ForArray {
+ override val values: List get() = valueBuilders.map { it.invoke() }
+ }
- public infix fun FieldPath.containsAny(values: List): Filter.WithConstraint = Filter.Path(this, WhereConstraint.ArrayContainsAny(values))
+ public data class InArray @PublishedApi internal constructor(private val valueBuilders: List<() -> Any>) : ForArray {
+ override val values: List get() = valueBuilders.map { it.invoke() }
+ }
- public infix fun String.inArray(values: List): Filter.WithConstraint = Filter.Field(this, WhereConstraint.InArray(values))
+ public data class NotInArray @PublishedApi internal constructor(private val valueBuilders: List<() -> Any>) : ForArray {
+ override val values: List get() = valueBuilders.map { it.invoke() }
+ }
+}
- public infix fun FieldPath.inArray(values: List): Filter.WithConstraint = Filter.Path(this, WhereConstraint.InArray(values))
+public sealed class Filter {
+ public data class And internal constructor(val filters: List) : Filter()
+ public data class Or internal constructor(val filters: List) : Filter()
+ public sealed class WithConstraint : Filter() {
+ public abstract val constraint: WhereConstraint
+ }
- public infix fun String.notInArray(values: List): Filter.WithConstraint = Filter.Field(this, WhereConstraint.NotInArray(values))
+ public data class Field @PublishedApi internal constructor(val field: String, override val constraint: WhereConstraint) : WithConstraint()
+ public data class Path @PublishedApi internal constructor(val path: FieldPath, override val constraint: WhereConstraint) : WithConstraint()
+}
- public infix fun FieldPath.notInArray(values: List): Filter.WithConstraint = Filter.Path(this, WhereConstraint.NotInArray(values))
+public class FilterBuilder internal constructor() : EncodeSettings.Builder {
+
+ override var encodeDefaults: Boolean = true
+ override var serializersModule: SerializersModule = EmptySerializersModule()
+
+ public fun withEncoder(dsl: FilterBuilder.() -> Filter): Filter = FilterBuilder()
+ .run(dsl)
+
+ public val String.isNull: Filter.WithConstraint get() = Filter.Field(this, WhereConstraint.EqualTo { null })
+ public inline infix fun String.equalTo(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.EqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+ public fun String.equalTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.EqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+
+ public val FieldPath.isNull: Filter.WithConstraint get() = Filter.Path(this, WhereConstraint.EqualTo { null })
+ public inline infix fun FieldPath.equalTo(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.EqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+ public fun FieldPath.equalTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.EqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+
+ public val String.isNotNull: Filter.WithConstraint get() = Filter.Field(this, WhereConstraint.NotEqualTo { null })
+ public inline infix fun String.notEqualTo(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.NotEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+ public fun String.notEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.NotEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+
+ public val FieldPath.isNotNull: Filter.WithConstraint get() = Filter.Path(this, WhereConstraint.NotEqualTo { null })
+ public inline infix fun FieldPath.notEqualTo(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.NotEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+ public fun FieldPath.notEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.NotEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }
+ },
+ )
+
+ public inline infix fun String.lessThan(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.LessThan {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun String.lessThan(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.LessThan {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun FieldPath.lessThan(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.LessThan {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun FieldPath.lessThan(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.LessThan {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun String.greaterThan(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.GreaterThan {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun String.greaterThan(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.GreaterThan {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun FieldPath.greaterThan(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.GreaterThan {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun FieldPath.greaterThan(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.GreaterThan {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun String.lessThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.LessThanOrEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun String.lessThanOrEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.LessThanOrEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun FieldPath.lessThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.LessThanOrEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun FieldPath.lessThanOrEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.LessThanOrEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun String.greaterThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.GreaterThanOrEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun String.greaterThanOrEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.GreaterThanOrEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun FieldPath.greaterThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.GreaterThanOrEqualTo {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun FieldPath.greaterThanOrEqualTo(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.GreaterThanOrEqualTo {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun String.contains(value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.ArrayContains {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun String.contains(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.ArrayContains {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun FieldPath.contains(value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.ArrayContains {
+ encode(value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+ public fun FieldPath.contains(strategy: SerializationStrategy, value: T): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.ArrayContains {
+ dev.gitlive.firebase.internal.encode(strategy, value) { copyFrom(this@FilterBuilder) }!!
+ },
+ )
+
+ public inline infix fun String.containsAny(values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.ArrayContainsAny(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun String.containsAny(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.ArrayContainsAny(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+
+ public inline infix fun FieldPath.containsAny(values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.ArrayContainsAny(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun FieldPath.containsAny(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.ArrayContainsAny(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+
+ public inline infix fun String.inArray(values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.InArray(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun String.inArray(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.InArray(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+
+ public inline infix fun FieldPath.inArray(values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.InArray(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun FieldPath.inArray(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.InArray(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+
+ public inline infix fun String.notInArray(values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.NotInArray(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun String.notInArray(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Field(
+ this,
+ WhereConstraint.NotInArray(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+
+ public inline infix fun FieldPath.notInArray(values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.NotInArray(
+ values.map { value ->
+ { encode(value) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
+ public fun FieldPath.notInArray(strategy: SerializationStrategy, values: List): Filter.WithConstraint = Filter.Path(
+ this,
+ WhereConstraint.NotInArray(
+ values.map {
+ { dev.gitlive.firebase.internal.encode(strategy, it) { copyFrom(this@FilterBuilder) }!! }
+ },
+ ),
+ )
public infix fun Filter.and(right: Filter): Filter.And {
val leftList = when (this) {
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/GeoPointSerializer.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/GeoPointSerializer.kt
index cb46e1792..7228704bc 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/GeoPointSerializer.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/GeoPointSerializer.kt
@@ -1,5 +1,6 @@
package dev.gitlive.firebase.firestore
+import dev.gitlive.firebase.FirebaseEncoder
import dev.gitlive.firebase.internal.SpecialValueSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/TimestampSerializer.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/TimestampSerializer.kt
index f970b0801..791e4d6f5 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/TimestampSerializer.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/TimestampSerializer.kt
@@ -1,5 +1,7 @@
package dev.gitlive.firebase.firestore
+import dev.gitlive.firebase.FirebaseEncoder
+import dev.gitlive.firebase.FirebaseDecoder
import dev.gitlive.firebase.internal.SpecialValueSerializer
import dev.gitlive.firebase.firestore.DoubleAsTimestampSerializer.SERVER_TIMESTAMP
import kotlinx.serialization.KSerializer
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt
index bf4723e49..660e4fcd9 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt
@@ -18,7 +18,6 @@ import dev.gitlive.firebase.firestore.internal.NativeQueryWrapper
import dev.gitlive.firebase.firestore.internal.NativeTransactionWrapper
import dev.gitlive.firebase.firestore.internal.NativeWriteBatchWrapper
import dev.gitlive.firebase.firestore.internal.SetOptions
-import dev.gitlive.firebase.firestore.internal.safeValue
import dev.gitlive.firebase.internal.decode
import dev.gitlive.firebase.internal.encodeAsObject
import kotlinx.coroutines.flow.Flow
@@ -179,31 +178,61 @@ public data class Transaction internal constructor(internal val nativeWrapper: N
internal fun setEncoded(documentRef: DocumentReference, encodedData: EncodedObject, setOptions: SetOptions): Transaction = Transaction(nativeWrapper.setEncoded(documentRef, encodedData, setOptions))
@Deprecated("Deprecated. Use builder instead", replaceWith = ReplaceWith("update(documentRef, data) { this.encodeDefaults = encodeDefaults }"))
- public fun update(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean): Transaction = update(documentRef, data) {
- this.encodeDefaults = encodeDefaults
- }
+ public fun update(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean): Transaction =
+ update(documentRef, data) {
+ this.encodeDefaults = encodeDefaults
+ }
public inline fun update(documentRef: DocumentReference, data: Any, buildSettings: EncodeSettings.Builder.() -> Unit = {}): Transaction = updateEncoded(documentRef, encodeAsObject(data, buildSettings))
@Deprecated("Deprecated. Use builder instead", replaceWith = ReplaceWith("update(documentRef, strategy, data) { this.encodeDefaults = encodeDefaults }"))
- public fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, encodeDefaults: Boolean): Transaction = update(documentRef, strategy, data) {
- this.encodeDefaults = encodeDefaults
- }
+ public fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, encodeDefaults: Boolean): Transaction =
+ update(documentRef, strategy, data) {
+ this.encodeDefaults = encodeDefaults
+ }
public inline fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, buildSettings: EncodeSettings.Builder.() -> Unit = {}): Transaction = updateEncoded(documentRef, encodeAsObject(strategy, data, buildSettings))
@JvmName("updateFields")
- public inline fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}): Transaction = updateEncodedFieldsAndValues(documentRef, encodeFieldAndValue(fieldsAndValues, buildSettings).orEmpty())
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair): Transaction =
+ update(documentRef, *fieldsAndValues) {}
+
+ @JvmName("updateFields")
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): Transaction =
+ updateFields(
+ documentRef,
+ ) {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (field, value) ->
+ field to value
+ }
+ }
@JvmName("updateFieldPaths")
- public inline fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}): Transaction = updateEncodedFieldPathsAndValues(documentRef, encodeFieldAndValue(fieldsAndValues, buildSettings).orEmpty())
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair): Transaction =
+ update(documentRef, *fieldsAndValues) {}
- @PublishedApi
- internal fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject): Transaction = Transaction(nativeWrapper.updateEncoded(documentRef, encodedData))
+ @JvmName("updateFieldPaths")
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): Transaction =
+ updateFields(
+ documentRef,
+ ) {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (field, value) ->
+ field to value
+ }
+ }
- @PublishedApi
- internal fun updateEncodedFieldsAndValues(documentRef: DocumentReference, encodedFieldsAndValues: List>): Transaction = Transaction(nativeWrapper.updateEncodedFieldsAndValues(documentRef, encodedFieldsAndValues))
+ /**
+ * Updates Fields/[FieldPath] of a [DocumentReference] using a [FieldsAndValuesUpdateDSL].
+ * @param documentRef the [DocumentReference] to update
+ * @param fieldsAndValuesUpdateDSL closure for configuring the [FieldsAndValuesUpdateDSL]
+ */
+ public fun updateFields(
+ documentRef: DocumentReference,
+ fieldsAndValuesUpdateDSL: FieldsAndValuesUpdateDSL.() -> Unit,
+ ): Transaction = Transaction(nativeWrapper.updateEncoded(documentRef, FieldsAndValuesUpdateDSL().apply(fieldsAndValuesUpdateDSL).fieldsAndValues))
@PublishedApi
- internal fun updateEncodedFieldPathsAndValues(documentRef: DocumentReference, encodedFieldsAndValues: List>): Transaction = Transaction(nativeWrapper.updateEncodedFieldPathsAndValues(documentRef, encodedFieldsAndValues))
+ internal fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject): Transaction = Transaction(nativeWrapper.updateEncoded(documentRef, encodedData))
public fun delete(documentRef: DocumentReference): Transaction = Transaction(nativeWrapper.delete(documentRef))
public suspend fun get(documentRef: DocumentReference): DocumentSnapshot = DocumentSnapshot(nativeWrapper.get(documentRef))
@@ -230,14 +259,79 @@ public open class Query internal constructor(internal val nativeQuery: NativeQue
public fun orderBy(field: FieldPath, direction: Direction = Direction.ASCENDING): Query = Query(nativeQuery.orderBy(field.encoded, direction))
public fun startAfter(document: DocumentSnapshot): Query = Query(nativeQuery.startAfter(document.native))
- public fun startAfter(vararg fieldValues: Any): Query = Query(nativeQuery.startAfter(*(fieldValues.map { it.safeValue }.toTypedArray())))
+ public fun startAfter(vararg fieldValues: Any?): Query = startAfter(*fieldValues) {}
+ public fun startAfter(vararg fieldValues: Any?, buildSettings: EncodeSettings.Builder.() -> Unit): Query =
+ startAfterFieldValues {
+ apply(buildSettings)
+
+ fieldValues.forEach {
+ add(it)
+ }
+ }
+
+ /**
+ * Creates and returns a new [Query] that starts after the provided fields relative to the order of the query.
+ * The field values are configured using a [FieldValuesDSL].
+ * The order of the field values must match the order of the [orderBy] clauses of the query
+ * @param builder closure for configuring the [FieldValuesDSL]
+ */
+ public fun startAfterFieldValues(builder: FieldValuesDSL.() -> Unit): Query = Query(nativeQuery.startAfter(*FieldValuesDSL().apply(builder).fieldValues.toTypedArray()))
+
public fun startAt(document: DocumentSnapshot): Query = Query(nativeQuery.startAt(document.native))
- public fun startAt(vararg fieldValues: Any): Query = Query(nativeQuery.startAt(*(fieldValues.map { it.safeValue }.toTypedArray())))
+ public fun startAt(vararg fieldValues: Any?): Query = startAt(*fieldValues) {}
+ public fun startAt(vararg fieldValues: Any?, buildSettings: EncodeSettings.Builder.() -> Unit): Query =
+ startAtFieldValues {
+ apply(buildSettings)
+ fieldValues.forEach {
+ add(it)
+ }
+ }
+
+ /**
+ * Creates and returns a new [Query] that starts at the provided fields relative to the order of the query.
+ * The field values are configured using a [FieldValuesDSL].
+ * The order of the field values must match the order of the [orderBy] clauses of the query
+ * @param builder closure for configuring the [FieldValuesDSL]
+ */
+ public fun startAtFieldValues(builder: FieldValuesDSL.() -> Unit): Query = Query(nativeQuery.startAt(*FieldValuesDSL().apply(builder).fieldValues.toTypedArray()))
public fun endBefore(document: DocumentSnapshot): Query = Query(nativeQuery.endBefore(document.native))
- public fun endBefore(vararg fieldValues: Any): Query = Query(nativeQuery.endBefore(*(fieldValues.map { it.safeValue }.toTypedArray())))
+ public fun endBefore(vararg fieldValues: Any?): Query = endBefore(*fieldValues) {}
+ public fun endBefore(vararg fieldValues: Any?, buildSettings: EncodeSettings.Builder.() -> Unit): Query =
+ endBeforeFieldValues {
+ withEncodeSettings {
+ apply(buildSettings)
+ fieldValues.forEach {
+ add(it)
+ }
+ }
+ }
+
+ /**
+ * Creates and returns a new [Query] that ends before the provided fields relative to the order of the query.
+ * The field values are configured using a [FieldValuesDSL].
+ * The order of the field values must match the order of the [orderBy] clauses of the query
+ * @param builder closure for configuring the [FieldValuesDSL]
+ */
+ public fun endBeforeFieldValues(builder: FieldValuesDSL.() -> Unit): Query = Query(nativeQuery.endBefore(*FieldValuesDSL().apply(builder).fieldValues.toTypedArray()))
+
public fun endAt(document: DocumentSnapshot): Query = Query(nativeQuery.endAt(document.native))
- public fun endAt(vararg fieldValues: Any): Query = Query(nativeQuery.endAt(*(fieldValues.map { it.safeValue }.toTypedArray())))
+ public fun endAt(vararg fieldValues: Any?): Query = endAt(*fieldValues) {}
+ public fun endAt(vararg fieldValues: Any?, buildSettings: EncodeSettings.Builder.() -> Unit): Query =
+ endAtFieldValues {
+ apply(buildSettings)
+ fieldValues.forEach {
+ add(it)
+ }
+ }
+
+ /**
+ * Creates and returns a new [Query] that ends at the provided fields relative to the order of the query.
+ * The field values are configured using a [FieldValuesDSL].
+ * The order of the field values must match the order of the [orderBy] clauses of the query
+ * @param builder closure for configuring the [FieldValuesDSL]
+ */
+ public fun endAtFieldValues(builder: FieldValuesDSL.() -> Unit): Query = Query(nativeQuery.endAt(*FieldValuesDSL().apply(builder).fieldValues.toTypedArray()))
}
@Deprecated("Deprecated in favor of using a [FilterBuilder]", replaceWith = ReplaceWith("where { field equalTo equalTo }", "dev.gitlive.firebase.firestore"))
@@ -348,33 +442,68 @@ public data class WriteBatch internal constructor(internal val nativeWrapper: Na
internal fun setEncoded(documentRef: DocumentReference, encodedData: EncodedObject, setOptions: SetOptions): WriteBatch = WriteBatch(nativeWrapper.setEncoded(documentRef, encodedData, setOptions))
@Deprecated("Deprecated. Use builder instead", replaceWith = ReplaceWith("update(documentRef, data) { this.encodeDefaults = encodeDefaults }"))
- public inline fun update(documentRef: DocumentReference, data: T, encodeDefaults: Boolean): WriteBatch = update(documentRef, data) {
- this.encodeDefaults = encodeDefaults
- }
+ public inline fun update(documentRef: DocumentReference, data: T, encodeDefaults: Boolean): WriteBatch =
+ update(documentRef, data) {
+ this.encodeDefaults = encodeDefaults
+ }
public inline fun update(documentRef: DocumentReference, data: T, buildSettings: EncodeSettings.Builder.() -> Unit = {}): WriteBatch =
updateEncoded(documentRef, encodeAsObject(data, buildSettings))
@Deprecated("Deprecated. Use builder instead", replaceWith = ReplaceWith("update(documentRef, strategy, data) { this.encodeDefaults = encodeDefaults }"))
- public fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, encodeDefaults: Boolean): WriteBatch = update(documentRef, strategy, data) {
- this.encodeDefaults = encodeDefaults
- }
+ public fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, encodeDefaults: Boolean): WriteBatch =
+ update(documentRef, strategy, data) {
+ this.encodeDefaults = encodeDefaults
+ }
public inline fun update(documentRef: DocumentReference, strategy: SerializationStrategy, data: T, buildSettings: EncodeSettings.Builder.() -> Unit = {}): WriteBatch =
updateEncoded(documentRef, encodeAsObject(strategy, data, buildSettings))
@JvmName("updateField")
- public inline fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}): WriteBatch = updateEncodedFieldsAndValues(documentRef, encodeFieldAndValue(fieldsAndValues, buildSettings).orEmpty())
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair): WriteBatch =
+ update(documentRef, *fieldsAndValues) {}
+
+ @JvmName("updateField")
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): WriteBatch =
+ updateFields(
+ documentRef,
+ ) {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (field, value) ->
+ field to value
+ }
+ }
@JvmName("updateFieldPath")
- public inline fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}): WriteBatch = updateEncodedFieldPathsAndValues(documentRef, encodeFieldAndValue(fieldsAndValues, buildSettings).orEmpty())
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair): WriteBatch =
+ update(documentRef, *fieldsAndValues) {}
- @PublishedApi
- internal fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject): WriteBatch = WriteBatch(nativeWrapper.updateEncoded(documentRef, encodedData))
+ @JvmName("updateFieldPath")
+ public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): WriteBatch =
+ updateFields(
+ documentRef,
+ ) {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (path, value) ->
+ path to value
+ }
+ }
- @PublishedApi
- internal fun updateEncodedFieldsAndValues(documentRef: DocumentReference, encodedFieldsAndValues: List>): WriteBatch = WriteBatch(nativeWrapper.updateEncodedFieldsAndValues(documentRef, encodedFieldsAndValues))
+ /**
+ * Updates Fields/[FieldPath] of a [DocumentReference] using a [FieldsAndValuesUpdateDSL].
+ * @param documentRef the [DocumentReference] to update
+ * @param fieldsAndValuesUpdateDSL closure for configuring the [FieldsAndValuesUpdateDSL]
+ */
+ public fun updateFields(
+ documentRef: DocumentReference,
+ fieldsAndValuesUpdateDSL: FieldsAndValuesUpdateDSL.() -> Unit,
+ ): WriteBatch = WriteBatch(
+ nativeWrapper.updateEncoded(
+ documentRef,
+ FieldsAndValuesUpdateDSL().apply(fieldsAndValuesUpdateDSL).fieldsAndValues,
+ ),
+ )
@PublishedApi
- internal fun updateEncodedFieldPathsAndValues(documentRef: DocumentReference, encodedFieldsAndValues: List>): WriteBatch = WriteBatch(nativeWrapper.updateEncodedFieldPathsAndValues(documentRef, encodedFieldsAndValues))
+ internal fun updateEncoded(documentRef: DocumentReference, encodedData: EncodedObject): WriteBatch = WriteBatch(nativeWrapper.updateEncoded(documentRef, encodedData))
public fun delete(documentRef: DocumentReference): WriteBatch = WriteBatch(nativeWrapper.delete(documentRef))
public suspend fun commit() {
@@ -513,33 +642,39 @@ public data class DocumentReference internal constructor(internal val native: Na
}
@JvmName("updateFields")
- public suspend inline fun update(vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}) {
- updateEncodedFieldsAndValues(
- encodeFieldAndValue(
- fieldsAndValues,
- buildSettings,
- ).orEmpty(),
- )
- }
+ public suspend fun update(vararg fieldsAndValues: Pair): Unit =
+ update(*fieldsAndValues) {}
- @PublishedApi
- internal suspend fun updateEncodedFieldsAndValues(encodedFieldsAndValues: List>) {
- native.updateEncodedFieldsAndValues(encodedFieldsAndValues)
- }
+ @JvmName("updateFields")
+ public suspend fun update(vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): Unit =
+ updateFields {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (field, value) ->
+ field to value
+ }
+ }
@JvmName("updateFieldPaths")
- public suspend inline fun update(vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit = {}) {
- updateEncodedFieldPathsAndValues(
- encodeFieldAndValue(
- fieldsAndValues,
- buildSettings,
- ).orEmpty(),
- )
- }
+ public suspend fun update(vararg fieldsAndValues: Pair): Unit =
+ update(*fieldsAndValues) {}
- @PublishedApi
- internal suspend fun updateEncodedFieldPathsAndValues(encodedFieldsAndValues: List>) {
- native.updateEncodedFieldPathsAndValues(encodedFieldsAndValues)
+ @JvmName("updateFieldPaths")
+ public suspend fun update(vararg fieldsAndValues: Pair, buildSettings: EncodeSettings.Builder.() -> Unit): Unit =
+ updateFields {
+ apply(buildSettings)
+ fieldsAndValues.forEach { (fieldPath, value) ->
+ fieldPath to value
+ }
+ }
+
+ /**
+ * Updates Fields/[FieldPath] using a [FieldsAndValuesUpdateDSL].
+ * @param fieldsAndValuesUpdateDSL closure for configuring the [FieldsAndValuesUpdateDSL]
+ */
+ public suspend fun updateFields(
+ fieldsAndValuesUpdateDSL: FieldsAndValuesUpdateDSL.() -> Unit,
+ ) {
+ native.updateEncoded(FieldsAndValuesUpdateDSL().apply(fieldsAndValuesUpdateDSL).fieldsAndValues)
}
public suspend fun delete() {
diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/helpers.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/helpers.kt
index 766836a76..7247ca002 100644
--- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/helpers.kt
+++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/helpers.kt
@@ -1,38 +1,39 @@
package dev.gitlive.firebase.firestore
-import dev.gitlive.firebase.EncodeSettings
-import kotlin.jvm.JvmName
+import dev.gitlive.firebase.firestore.internal.FieldAndValue
-// ** Helper method to perform an update operation. */
-@JvmName("performUpdateFields")
-@PublishedApi
-internal inline fun encodeFieldAndValue(
- fieldsAndValues: Array>,
- buildSettings: EncodeSettings.Builder.() -> Unit,
-): List>? = encodeFieldAndValue(fieldsAndValues, encodeField = { it }, encodeValue = { encode(it, buildSettings) })
+internal fun List.performUpdate(
+ updateAsField: (String, Any?, Array) -> R,
+ updateAsFieldPath: (EncodedFieldPath, Any?, Array) -> R,
+): R {
+ val first = first()
+ val remaining = drop(1).flatMap { fieldAndValue ->
+ listOf(
+ when (fieldAndValue) {
+ is FieldAndValue.WithFieldPath -> fieldAndValue.path.encoded
+ is FieldAndValue.WithStringField -> fieldAndValue.field
+ },
+ fieldAndValue.value,
+ )
+ }
+ return when (first) {
+ is FieldAndValue.WithFieldPath -> updateAsFieldPath(
+ first.path.encoded,
+ first.value,
+ remaining.toTypedArray(),
+ )
-/** Helper method to perform an update operation. */
-@JvmName("performUpdateFieldPaths")
-@PublishedApi
-internal inline fun encodeFieldAndValue(
- fieldsAndValues: Array>,
- buildSettings: EncodeSettings.Builder.() -> Unit,
-): List>? = encodeFieldAndValue(fieldsAndValues, { it.encoded }, { encode(it, buildSettings) })
+ is FieldAndValue.WithStringField -> updateAsField(
+ first.field,
+ first.value,
+ remaining.toTypedArray(),
+ )
+ }
+}
-/** Helper method to perform an update operation in Android and JS. */
-@PublishedApi
-internal inline fun encodeFieldAndValue(
- fieldsAndValues: Array>,
- encodeField: (T) -> K,
- encodeValue: (Any?) -> Any?,
-): List>? =
- fieldsAndValues.takeUnless { fieldsAndValues.isEmpty() }
- ?.map { (field, value) -> encodeField(field) to value?.let { encodeValue(it) } }
-
-internal fun List>.performUpdate(
- update: (K, Any?, Array) -> R,
-) = update(
- this[0].first,
- this[0].second,
- this.drop(1).flatMap { (field, value) -> listOf(field, value) }.toTypedArray(),
-)
+internal fun List