Skip to content

Commit bf8680c

Browse files
committed
Add support for customizing encoding behaviour when updating Values at paths
1 parent f682e3e commit bf8680c

File tree

9 files changed

+288
-194
lines changed

9 files changed

+288
-194
lines changed

firebase-common/api/android/firebase-common.api

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,3 @@ public final class dev/gitlive/firebase/FirebaseEncoder$DefaultImpls {
5151
public static fun encodeSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
5252
}
5353

54-
public final class dev/gitlive/firebase/ValueWithSerializer {
55-
public fun <init> (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)V
56-
public final fun component1 ()Ljava/lang/Object;
57-
public final fun component2 ()Lkotlinx/serialization/SerializationStrategy;
58-
public final fun copy (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ldev/gitlive/firebase/ValueWithSerializer;
59-
public static synthetic fun copy$default (Ldev/gitlive/firebase/ValueWithSerializer;Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;ILjava/lang/Object;)Ldev/gitlive/firebase/ValueWithSerializer;
60-
public fun equals (Ljava/lang/Object;)Z
61-
public final fun getSerializer ()Lkotlinx/serialization/SerializationStrategy;
62-
public final fun getValue ()Ljava/lang/Object;
63-
public fun hashCode ()I
64-
public fun toString ()Ljava/lang/String;
65-
}
66-
67-
public final class dev/gitlive/firebase/ValueWithSerializerKt {
68-
public static final fun withSerializer (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ljava/lang/Object;
69-
}
70-

firebase-common/api/jvm/firebase-common.api

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,3 @@ public final class dev/gitlive/firebase/FirebaseEncoder$DefaultImpls {
5151
public static fun encodeSerializableValue (Ldev/gitlive/firebase/FirebaseEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
5252
}
5353

54-
public final class dev/gitlive/firebase/ValueWithSerializer {
55-
public fun <init> (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)V
56-
public final fun component1 ()Ljava/lang/Object;
57-
public final fun component2 ()Lkotlinx/serialization/SerializationStrategy;
58-
public final fun copy (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ldev/gitlive/firebase/ValueWithSerializer;
59-
public static synthetic fun copy$default (Ldev/gitlive/firebase/ValueWithSerializer;Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;ILjava/lang/Object;)Ldev/gitlive/firebase/ValueWithSerializer;
60-
public fun equals (Ljava/lang/Object;)Z
61-
public final fun getSerializer ()Lkotlinx/serialization/SerializationStrategy;
62-
public final fun getValue ()Ljava/lang/Object;
63-
public fun hashCode ()I
64-
public fun toString ()Ljava/lang/String;
65-
}
66-
67-
public final class dev/gitlive/firebase/ValueWithSerializerKt {
68-
public static final fun withSerializer (Ljava/lang/Object;Lkotlinx/serialization/SerializationStrategy;)Ljava/lang/Object;
69-
}
70-

firebase-firestore/api/android/firebase-firestore.api

Lines changed: 81 additions & 49 deletions
Large diffs are not rendered by default.

firebase-firestore/api/jvm/firebase-firestore.api

Lines changed: 81 additions & 49 deletions
Large diffs are not rendered by default.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.gitlive.firebase.firestore
2+
3+
import dev.gitlive.firebase.EncodeSettings
4+
import kotlinx.serialization.SerializationStrategy
5+
6+
public data class EncodableValue(public val encoded: (EncodeSettings.Builder.() -> Unit) -> Any?)
7+
8+
public inline fun <reified T> T.encodable(): EncodableValue = EncodableValue {
9+
encode(this, it)
10+
}
11+
public fun <T : Any> T.encodableWithStrategy(stategy: SerializationStrategy<T>): EncodableValue = EncodableValue {
12+
dev.gitlive.firebase.internal.encode(stategy, this, it)
13+
}

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Filter.kt

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -48,185 +48,185 @@ public class FilterBuilder internal constructor() {
4848
public val String.isNull: Filter.WithConstraint get() = Filter.Field(this, WhereConstraint.EqualTo(null))
4949
public inline infix fun <reified T> String.equalTo(value: T): Filter.WithConstraint = Filter.Field(
5050
this,
51-
WhereConstraint.EqualTo(encode(value, buildSettings))
51+
WhereConstraint.EqualTo(encode(value, buildSettings)),
5252
)
5353
public fun <T : Any> String.equalTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
5454
this,
55-
WhereConstraint.EqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
55+
WhereConstraint.EqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)),
5656
)
5757

5858
public val FieldPath.isNull: Filter.WithConstraint get() = Filter.Path(this, WhereConstraint.EqualTo(null))
5959
public inline infix fun <reified T> FieldPath.equalTo(value: T): Filter.WithConstraint = Filter.Path(
6060
this,
61-
WhereConstraint.EqualTo(encode(value, buildSettings))
61+
WhereConstraint.EqualTo(encode(value, buildSettings)),
6262
)
6363
public fun <T : Any> FieldPath.equalTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
6464
this,
65-
WhereConstraint.EqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
65+
WhereConstraint.EqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)),
6666
)
6767

6868
public val String.isNotNull: Filter.WithConstraint get() = Filter.Field(this, WhereConstraint.NotEqualTo(null))
6969
public inline infix fun <reified T> String.notEqualTo(value: T): Filter.WithConstraint = Filter.Field(
7070
this,
71-
WhereConstraint.NotEqualTo(encode(value, buildSettings))
71+
WhereConstraint.NotEqualTo(encode(value, buildSettings)),
7272
)
7373
public fun <T : Any> String.notEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
7474
this,
75-
WhereConstraint.NotEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
75+
WhereConstraint.NotEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)),
7676
)
7777

7878
public val FieldPath.isNotNull: Filter.WithConstraint get() = Filter.Path(this, WhereConstraint.NotEqualTo(null))
7979
public inline infix fun <reified T> FieldPath.notEqualTo(value: T): Filter.WithConstraint = Filter.Path(
8080
this,
81-
WhereConstraint.NotEqualTo(encode(value, buildSettings))
81+
WhereConstraint.NotEqualTo(encode(value, buildSettings)),
8282
)
8383
public fun <T : Any> FieldPath.notEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
8484
this,
85-
WhereConstraint.NotEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
85+
WhereConstraint.NotEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)),
8686
)
8787

8888
public inline infix fun <reified T : Any> String.lessThan(value: T): Filter.WithConstraint = Filter.Field(
8989
this,
90-
WhereConstraint.LessThan(encode(value, buildSettings)!!)
90+
WhereConstraint.LessThan(encode(value, buildSettings)!!),
9191
)
9292
public fun <T : Any> String.lessThan(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
9393
this,
94-
WhereConstraint.LessThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
94+
WhereConstraint.LessThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
9595
)
9696

9797
public inline infix fun <reified T : Any> FieldPath.lessThan(value: T): Filter.WithConstraint = Filter.Path(
9898
this,
99-
WhereConstraint.LessThan(encode(value, buildSettings)!!)
99+
WhereConstraint.LessThan(encode(value, buildSettings)!!),
100100
)
101101
public fun <T : Any> FieldPath.lessThan(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
102102
this,
103-
WhereConstraint.LessThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
103+
WhereConstraint.LessThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
104104
)
105105

106106
public inline infix fun <reified T : Any> String.greaterThan(value: T): Filter.WithConstraint = Filter.Field(
107107
this,
108-
WhereConstraint.GreaterThan(encode(value, buildSettings)!!)
108+
WhereConstraint.GreaterThan(encode(value, buildSettings)!!),
109109
)
110110
public fun <T : Any> String.greaterThan(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
111111
this,
112-
WhereConstraint.GreaterThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
112+
WhereConstraint.GreaterThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
113113
)
114114

115115
public inline infix fun <reified T : Any> FieldPath.greaterThan(value: T): Filter.WithConstraint = Filter.Path(
116116
this,
117-
WhereConstraint.GreaterThan(encode(value, buildSettings)!!)
117+
WhereConstraint.GreaterThan(encode(value, buildSettings)!!),
118118
)
119119
public fun <T : Any> FieldPath.greaterThan(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
120120
this,
121-
WhereConstraint.GreaterThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
121+
WhereConstraint.GreaterThan(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
122122
)
123123

124124
public inline infix fun <reified T : Any> String.lessThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Field(
125125
this,
126-
WhereConstraint.LessThanOrEqualTo(encode(value, buildSettings)!!)
126+
WhereConstraint.LessThanOrEqualTo(encode(value, buildSettings)!!),
127127
)
128128
public fun <T : Any> String.lessThanOrEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
129129
this,
130-
WhereConstraint.LessThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
130+
WhereConstraint.LessThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
131131
)
132132

133133
public inline infix fun <reified T : Any> FieldPath.lessThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Path(
134134
this,
135-
WhereConstraint.LessThanOrEqualTo(encode(value, buildSettings)!!)
135+
WhereConstraint.LessThanOrEqualTo(encode(value, buildSettings)!!),
136136
)
137137
public fun <T : Any> FieldPath.lessThanOrEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
138138
this,
139-
WhereConstraint.GreaterThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
139+
WhereConstraint.GreaterThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
140140
)
141141

142142
public inline infix fun <reified T : Any> String.greaterThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Field(
143143
this,
144-
WhereConstraint.GreaterThanOrEqualTo(encode(value, buildSettings)!!)
144+
WhereConstraint.GreaterThanOrEqualTo(encode(value, buildSettings)!!),
145145
)
146146
public fun <T : Any> String.greaterThanOrEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
147147
this,
148-
WhereConstraint.GreaterThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
148+
WhereConstraint.GreaterThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
149149
)
150150

151151
public inline infix fun <reified T : Any> FieldPath.greaterThanOrEqualTo(value: T): Filter.WithConstraint = Filter.Path(
152152
this,
153-
WhereConstraint.GreaterThanOrEqualTo(encode(value, buildSettings)!!)
153+
WhereConstraint.GreaterThanOrEqualTo(encode(value, buildSettings)!!),
154154
)
155155
public fun <T : Any> FieldPath.greaterThanOrEqualTo(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
156156
this,
157-
WhereConstraint.LessThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
157+
WhereConstraint.LessThanOrEqualTo(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
158158
)
159159

160160
public inline infix fun <reified T : Any> String.contains(value: T): Filter.WithConstraint = Filter.Field(
161161
this,
162-
WhereConstraint.ArrayContains(encode(value, buildSettings)!!)
162+
WhereConstraint.ArrayContains(encode(value, buildSettings)!!),
163163
)
164164
public fun <T : Any> String.contains(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Field(
165165
this,
166-
WhereConstraint.ArrayContains(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
166+
WhereConstraint.ArrayContains(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
167167
)
168168

169169
public inline infix fun <reified T : Any> FieldPath.contains(value: T): Filter.WithConstraint = Filter.Path(
170170
this,
171-
WhereConstraint.ArrayContains(encode(value, buildSettings)!!)
171+
WhereConstraint.ArrayContains(encode(value, buildSettings)!!),
172172
)
173173
public fun <T : Any> FieldPath.contains(strategy: SerializationStrategy<T>, value: T): Filter.WithConstraint = Filter.Path(
174174
this,
175-
WhereConstraint.ArrayContains(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!)
175+
WhereConstraint.ArrayContains(dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!!),
176176
)
177177

178178
public inline infix fun <reified T : Any> String.containsAny(values: List<T>): Filter.WithConstraint = Filter.Field(
179179
this,
180-
WhereConstraint.ArrayContainsAny(values.map { encode(it, buildSettings)!! })
180+
WhereConstraint.ArrayContainsAny(values.map { encode(it, buildSettings)!! }),
181181
)
182182
public fun <T : Any> String.containsAny(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Field(
183183
this,
184-
WhereConstraint.ArrayContainsAny(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
184+
WhereConstraint.ArrayContainsAny(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
185185
)
186186

187187
public inline infix fun <reified T : Any> FieldPath.containsAny(values: List<T>): Filter.WithConstraint = Filter.Path(
188188
this,
189-
WhereConstraint.ArrayContainsAny(values.map { encode(it, buildSettings)!! })
189+
WhereConstraint.ArrayContainsAny(values.map { encode(it, buildSettings)!! }),
190190
)
191191
public fun <T : Any> FieldPath.containsAny(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Path(
192192
this,
193-
WhereConstraint.ArrayContainsAny(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
193+
WhereConstraint.ArrayContainsAny(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
194194
)
195195

196196
public inline infix fun <reified T : Any> String.inArray(values: List<T>): Filter.WithConstraint = Filter.Field(
197197
this,
198-
WhereConstraint.InArray(values.map { encode(it, buildSettings)!! })
198+
WhereConstraint.InArray(values.map { encode(it, buildSettings)!! }),
199199
)
200200
public fun <T : Any> String.inArray(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Field(
201201
this,
202-
WhereConstraint.InArray(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
202+
WhereConstraint.InArray(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
203203
)
204204

205205
public inline infix fun <reified T : Any> FieldPath.inArray(values: List<T>): Filter.WithConstraint = Filter.Path(
206206
this,
207-
WhereConstraint.InArray(values.map { encode(it, buildSettings)!! })
207+
WhereConstraint.InArray(values.map { encode(it, buildSettings)!! }),
208208
)
209209
public fun <T : Any> FieldPath.inArray(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Path(
210210
this,
211-
WhereConstraint.InArray(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
211+
WhereConstraint.InArray(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
212212
)
213213

214214
public inline infix fun <reified T : Any> String.notInArray(values: List<T>): Filter.WithConstraint = Filter.Field(
215215
this,
216-
WhereConstraint.NotInArray(values.map { encode(it, buildSettings)!! })
216+
WhereConstraint.NotInArray(values.map { encode(it, buildSettings)!! }),
217217
)
218218
public fun <T : Any> String.notInArray(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Field(
219219
this,
220-
WhereConstraint.NotInArray(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
220+
WhereConstraint.NotInArray(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
221221
)
222222

223223
public inline infix fun <reified T : Any> FieldPath.notInArray(values: List<T>): Filter.WithConstraint = Filter.Path(
224224
this,
225-
WhereConstraint.NotInArray(values.map { encode(it, buildSettings)!! })
225+
WhereConstraint.NotInArray(values.map { encode(it, buildSettings)!! }),
226226
)
227227
public fun <T : Any> FieldPath.notInArray(strategy: SerializationStrategy<T>, values: List<T>): Filter.WithConstraint = Filter.Path(
228228
this,
229-
WhereConstraint.NotInArray(values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
229+
WhereConstraint.NotInArray(values.map { dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! }),
230230
)
231231

232232
public infix fun Filter.and(right: Filter): Filter.And {

0 commit comments

Comments
 (0)