1
1
package dev.gitlive.firebase.firestore
2
2
3
- import dev.gitlive.firebase.firestore.internal.safeValue
3
+ import dev.gitlive.firebase.EncodeSettings
4
+ import kotlinx.serialization.SerializationStrategy
4
5
5
6
public sealed interface WhereConstraint {
6
7
7
8
public sealed interface ForNullableObject : WhereConstraint {
8
9
public val value: Any?
9
- public val safeValue: Any? get() = value?.safeValue
10
10
}
11
11
12
12
public sealed interface ForObject : WhereConstraint {
13
13
public val value: Any
14
- public val safeValue: Any get() = value.safeValue
15
14
}
16
15
public sealed interface ForArray : WhereConstraint {
17
16
public val values: List <Any >
18
- public val safeValues: List <Any > get() = values.map { it.safeValue }
19
17
}
20
18
21
- public data class EqualTo internal constructor(override val value : Any? ) : ForNullableObject
22
- public data class NotEqualTo internal constructor(override val value : Any? ) : ForNullableObject
23
- public data class LessThan internal constructor(override val value : Any ) : ForObject
24
- public data class GreaterThan internal constructor(override val value : Any ) : ForObject
25
- public data class LessThanOrEqualTo internal constructor(override val value : Any ) : ForObject
26
- public data class GreaterThanOrEqualTo internal constructor(override val value : Any ) : ForObject
27
- public data class ArrayContains internal constructor(override val value : Any ) : ForObject
28
- public data class ArrayContainsAny internal constructor(override val values : List <Any >) : ForArray
29
- public data class InArray internal constructor(override val values : List <Any >) : ForArray
30
- public data class NotInArray internal constructor(override val values : List <Any >) : ForArray
19
+ public data class EqualTo @PublishedApi internal constructor(override val value : Any? ) : ForNullableObject
20
+ public data class NotEqualTo @PublishedApi internal constructor(override val value : Any? ) : ForNullableObject
21
+ public data class LessThan @PublishedApi internal constructor(override val value : Any ) : ForObject
22
+ public data class GreaterThan @PublishedApi internal constructor(override val value : Any ) : ForObject
23
+ public data class LessThanOrEqualTo @PublishedApi internal constructor(override val value : Any ) : ForObject
24
+ public data class GreaterThanOrEqualTo @PublishedApi internal constructor(override val value : Any ) : ForObject
25
+ public data class ArrayContains @PublishedApi internal constructor(override val value : Any ) : ForObject
26
+ public data class ArrayContainsAny @PublishedApi internal constructor(override val values : List <Any >) : ForArray
27
+ public data class InArray @PublishedApi internal constructor(override val values : List <Any >) : ForArray
28
+ public data class NotInArray @PublishedApi internal constructor(override val values : List <Any >) : ForArray
31
29
}
32
30
33
31
public sealed class Filter {
@@ -37,51 +35,199 @@ public sealed class Filter {
37
35
public abstract val constraint: WhereConstraint
38
36
}
39
37
40
- public data class Field internal constructor(val field : String , override val constraint : WhereConstraint ) : WithConstraint()
41
- public data class Path internal constructor(val path : FieldPath , override val constraint : WhereConstraint ) : WithConstraint()
38
+ public data class Field @PublishedApi internal constructor(val field : String , override val constraint : WhereConstraint ) : WithConstraint()
39
+ public data class Path @PublishedApi internal constructor(val path : FieldPath , override val constraint : WhereConstraint ) : WithConstraint()
42
40
}
43
41
44
42
public class FilterBuilder internal constructor() {
45
43
46
- public infix fun String.equalTo (value : Any? ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .EqualTo (value))
47
-
48
- public infix fun FieldPath.equalTo (value : Any? ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .EqualTo (value))
49
-
50
- public infix fun String.notEqualTo (value : Any? ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .NotEqualTo (value))
51
-
52
- public infix fun FieldPath.notEqualTo (value : Any? ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .NotEqualTo (value))
53
-
54
- public infix fun String.lessThan (value : Any ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .LessThan (value))
55
-
56
- public infix fun FieldPath.lessThan (value : Any ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .LessThan (value))
57
-
58
- public infix fun String.greaterThan (value : Any ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .GreaterThan (value))
59
-
60
- public infix fun FieldPath.greaterThan (value : Any ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .GreaterThan (value))
61
-
62
- public infix fun String.lessThanOrEqualTo (value : Any ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .LessThanOrEqualTo (value))
63
-
64
- public infix fun FieldPath.lessThanOrEqualTo (value : Any ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .LessThanOrEqualTo (value))
65
-
66
- public infix fun String.greaterThanOrEqualTo (value : Any ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .GreaterThanOrEqualTo (value))
67
-
68
- public infix fun FieldPath.greaterThanOrEqualTo (value : Any ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .GreaterThanOrEqualTo (value))
69
-
70
- public infix fun String.contains (value : Any ): Filter .WithConstraint = Filter .Field (this , WhereConstraint .ArrayContains (value))
71
-
72
- public infix fun FieldPath.contains (value : Any ): Filter .WithConstraint = Filter .Path (this , WhereConstraint .ArrayContains (value))
73
-
74
- public infix fun String.containsAny (values : List <Any >): Filter .WithConstraint = Filter .Field (this , WhereConstraint .ArrayContainsAny (values))
75
-
76
- public infix fun FieldPath.containsAny (values : List <Any >): Filter .WithConstraint = Filter .Path (this , WhereConstraint .ArrayContainsAny (values))
77
-
78
- public infix fun String.inArray (values : List <Any >): Filter .WithConstraint = Filter .Field (this , WhereConstraint .InArray (values))
79
-
80
- public infix fun FieldPath.inArray (values : List <Any >): Filter .WithConstraint = Filter .Path (this , WhereConstraint .InArray (values))
81
-
82
- public infix fun String.notInArray (values : List <Any >): Filter .WithConstraint = Filter .Field (this , WhereConstraint .NotInArray (values))
44
+ public var buildSettings: EncodeSettings .Builder .() -> Unit = {
45
+ encodeDefaults = true
46
+ }
83
47
84
- public infix fun FieldPath.notInArray (values : List <Any >): Filter .WithConstraint = Filter .Path (this , WhereConstraint .NotInArray (values))
48
+ public val String .isNull: Filter .WithConstraint get() = Filter .Field (this , WhereConstraint .EqualTo (null ))
49
+ public inline infix fun <reified T > String.equalTo (value : T ): Filter .WithConstraint = Filter .Field (
50
+ this ,
51
+ WhereConstraint .EqualTo (encode(value, buildSettings))
52
+ )
53
+ public fun <T : Any > String.equalTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
54
+ this ,
55
+ WhereConstraint .EqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
56
+ )
57
+
58
+ public val FieldPath .isNull: Filter .WithConstraint get() = Filter .Path (this , WhereConstraint .EqualTo (null ))
59
+ public inline infix fun <reified T > FieldPath.equalTo (value : T ): Filter .WithConstraint = Filter .Path (
60
+ this ,
61
+ WhereConstraint .EqualTo (encode(value, buildSettings))
62
+ )
63
+ public fun <T : Any > FieldPath.equalTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
64
+ this ,
65
+ WhereConstraint .EqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
66
+ )
67
+
68
+ public val String .isNotNull: Filter .WithConstraint get() = Filter .Field (this , WhereConstraint .NotEqualTo (null ))
69
+ public inline infix fun <reified T > String.notEqualTo (value : T ): Filter .WithConstraint = Filter .Field (
70
+ this ,
71
+ WhereConstraint .NotEqualTo (encode(value, buildSettings))
72
+ )
73
+ public fun <T : Any > String.notEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
74
+ this ,
75
+ WhereConstraint .NotEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
76
+ )
77
+
78
+ public val FieldPath .isNotNull: Filter .WithConstraint get() = Filter .Path (this , WhereConstraint .NotEqualTo (null ))
79
+ public inline infix fun <reified T > FieldPath.notEqualTo (value : T ): Filter .WithConstraint = Filter .Path (
80
+ this ,
81
+ WhereConstraint .NotEqualTo (encode(value, buildSettings))
82
+ )
83
+ public fun <T : Any > FieldPath.notEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
84
+ this ,
85
+ WhereConstraint .NotEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings))
86
+ )
87
+
88
+ public inline infix fun <reified T : Any > String.lessThan (value : T ): Filter .WithConstraint = Filter .Field (
89
+ this ,
90
+ WhereConstraint .LessThan (encode(value, buildSettings)!! )
91
+ )
92
+ public fun <T : Any > String.lessThan (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
93
+ this ,
94
+ WhereConstraint .LessThan (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
95
+ )
96
+
97
+ public inline infix fun <reified T : Any > FieldPath.lessThan (value : T ): Filter .WithConstraint = Filter .Path (
98
+ this ,
99
+ WhereConstraint .LessThan (encode(value, buildSettings)!! )
100
+ )
101
+ public fun <T : Any > FieldPath.lessThan (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
102
+ this ,
103
+ WhereConstraint .LessThan (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
104
+ )
105
+
106
+ public inline infix fun <reified T : Any > String.greaterThan (value : T ): Filter .WithConstraint = Filter .Field (
107
+ this ,
108
+ WhereConstraint .GreaterThan (encode(value, buildSettings)!! )
109
+ )
110
+ public fun <T : Any > String.greaterThan (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
111
+ this ,
112
+ WhereConstraint .GreaterThan (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
113
+ )
114
+
115
+ public inline infix fun <reified T : Any > FieldPath.greaterThan (value : T ): Filter .WithConstraint = Filter .Path (
116
+ this ,
117
+ WhereConstraint .GreaterThan (encode(value, buildSettings)!! )
118
+ )
119
+ public fun <T : Any > FieldPath.greaterThan (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
120
+ this ,
121
+ WhereConstraint .GreaterThan (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
122
+ )
123
+
124
+ public inline infix fun <reified T : Any > String.lessThanOrEqualTo (value : T ): Filter .WithConstraint = Filter .Field (
125
+ this ,
126
+ WhereConstraint .LessThanOrEqualTo (encode(value, buildSettings)!! )
127
+ )
128
+ public fun <T : Any > String.lessThanOrEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
129
+ this ,
130
+ WhereConstraint .LessThanOrEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
131
+ )
132
+
133
+ public inline infix fun <reified T : Any > FieldPath.lessThanOrEqualTo (value : T ): Filter .WithConstraint = Filter .Path (
134
+ this ,
135
+ WhereConstraint .LessThanOrEqualTo (encode(value, buildSettings)!! )
136
+ )
137
+ public fun <T : Any > FieldPath.lessThanOrEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
138
+ this ,
139
+ WhereConstraint .GreaterThanOrEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
140
+ )
141
+
142
+ public inline infix fun <reified T : Any > String.greaterThanOrEqualTo (value : T ): Filter .WithConstraint = Filter .Field (
143
+ this ,
144
+ WhereConstraint .GreaterThanOrEqualTo (encode(value, buildSettings)!! )
145
+ )
146
+ public fun <T : Any > String.greaterThanOrEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
147
+ this ,
148
+ WhereConstraint .GreaterThanOrEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
149
+ )
150
+
151
+ public inline infix fun <reified T : Any > FieldPath.greaterThanOrEqualTo (value : T ): Filter .WithConstraint = Filter .Path (
152
+ this ,
153
+ WhereConstraint .GreaterThanOrEqualTo (encode(value, buildSettings)!! )
154
+ )
155
+ public fun <T : Any > FieldPath.greaterThanOrEqualTo (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
156
+ this ,
157
+ WhereConstraint .LessThanOrEqualTo (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
158
+ )
159
+
160
+ public inline infix fun <reified T : Any > String.contains (value : T ): Filter .WithConstraint = Filter .Field (
161
+ this ,
162
+ WhereConstraint .ArrayContains (encode(value, buildSettings)!! )
163
+ )
164
+ public fun <T : Any > String.contains (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Field (
165
+ this ,
166
+ WhereConstraint .ArrayContains (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
167
+ )
168
+
169
+ public inline infix fun <reified T : Any > FieldPath.contains (value : T ): Filter .WithConstraint = Filter .Path (
170
+ this ,
171
+ WhereConstraint .ArrayContains (encode(value, buildSettings)!! )
172
+ )
173
+ public fun <T : Any > FieldPath.contains (strategy : SerializationStrategy <T >, value : T ): Filter .WithConstraint = Filter .Path (
174
+ this ,
175
+ WhereConstraint .ArrayContains (dev.gitlive.firebase.internal.encode(strategy, value, buildSettings)!! )
176
+ )
177
+
178
+ public inline infix fun <reified T : Any > String.containsAny (values : List <T >): Filter .WithConstraint = Filter .Field (
179
+ this ,
180
+ WhereConstraint .ArrayContainsAny (values.map { encode(it, buildSettings)!! })
181
+ )
182
+ public fun <T : Any > String.containsAny (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Field (
183
+ this ,
184
+ WhereConstraint .ArrayContainsAny (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
185
+ )
186
+
187
+ public inline infix fun <reified T : Any > FieldPath.containsAny (values : List <T >): Filter .WithConstraint = Filter .Path (
188
+ this ,
189
+ WhereConstraint .ArrayContainsAny (values.map { encode(it, buildSettings)!! })
190
+ )
191
+ public fun <T : Any > FieldPath.containsAny (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Path (
192
+ this ,
193
+ WhereConstraint .ArrayContainsAny (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
194
+ )
195
+
196
+ public inline infix fun <reified T : Any > String.inArray (values : List <T >): Filter .WithConstraint = Filter .Field (
197
+ this ,
198
+ WhereConstraint .InArray (values.map { encode(it, buildSettings)!! })
199
+ )
200
+ public fun <T : Any > String.inArray (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Field (
201
+ this ,
202
+ WhereConstraint .InArray (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
203
+ )
204
+
205
+ public inline infix fun <reified T : Any > FieldPath.inArray (values : List <T >): Filter .WithConstraint = Filter .Path (
206
+ this ,
207
+ WhereConstraint .InArray (values.map { encode(it, buildSettings)!! })
208
+ )
209
+ public fun <T : Any > FieldPath.inArray (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Path (
210
+ this ,
211
+ WhereConstraint .InArray (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
212
+ )
213
+
214
+ public inline infix fun <reified T : Any > String.notInArray (values : List <T >): Filter .WithConstraint = Filter .Field (
215
+ this ,
216
+ WhereConstraint .NotInArray (values.map { encode(it, buildSettings)!! })
217
+ )
218
+ public fun <T : Any > String.notInArray (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Field (
219
+ this ,
220
+ WhereConstraint .NotInArray (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
221
+ )
222
+
223
+ public inline infix fun <reified T : Any > FieldPath.notInArray (values : List <T >): Filter .WithConstraint = Filter .Path (
224
+ this ,
225
+ WhereConstraint .NotInArray (values.map { encode(it, buildSettings)!! })
226
+ )
227
+ public fun <T : Any > FieldPath.notInArray (strategy : SerializationStrategy <T >, values : List <T >): Filter .WithConstraint = Filter .Path (
228
+ this ,
229
+ WhereConstraint .NotInArray (values.map {dev.gitlive.firebase.internal.encode(strategy, it, buildSettings)!! })
230
+ )
85
231
86
232
public infix fun Filter.and (right : Filter ): Filter .And {
87
233
val leftList = when (this ) {
0 commit comments