Skip to content

Commit 158a098

Browse files
authored
Add typed reference filter (#53)
Co-authored-by: hfhbd <[email protected]>
1 parent efcfbe9 commit 158a098

File tree

5 files changed

+35
-16
lines changed

5 files changed

+35
-16
lines changed

cloudkitclient-core/api/cloudkitclient-core.api

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ public final class app/softwork/cloudkitclient/Filter$$serializer : kotlinx/seri
212212
public final class app/softwork/cloudkitclient/Filter$Builder {
213213
public fun <init> ()V
214214
public final fun build ()Ljava/util/List;
215+
public final fun eq (Lkotlin/reflect/KProperty1;Lapp/softwork/cloudkitclient/Record;)V
215216
public final fun eq (Lkotlin/reflect/KProperty1;Ljava/lang/String;)V
216217
}
217218

@@ -1076,6 +1077,7 @@ public final class app/softwork/cloudkitclient/types/Reference {
10761077
public static final field Companion Lapp/softwork/cloudkitclient/types/Reference$Companion;
10771078
public synthetic fun <init> (ILjava/lang/String;Lapp/softwork/cloudkitclient/ZoneID;Lapp/softwork/cloudkitclient/types/Reference$Action;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
10781079
public fun <init> (Ljava/lang/String;Lapp/softwork/cloudkitclient/ZoneID;Lapp/softwork/cloudkitclient/types/Reference$Action;)V
1080+
public synthetic fun <init> (Ljava/lang/String;Lapp/softwork/cloudkitclient/ZoneID;Lapp/softwork/cloudkitclient/types/Reference$Action;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
10791081
public final fun component1 ()Ljava/lang/String;
10801082
public final fun component2 ()Lapp/softwork/cloudkitclient/ZoneID;
10811083
public final fun component3 ()Lapp/softwork/cloudkitclient/types/Reference$Action;
@@ -1090,8 +1092,8 @@ public final class app/softwork/cloudkitclient/types/Reference {
10901092
}
10911093

10921094
public final class app/softwork/cloudkitclient/types/Reference$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
1093-
public static final field INSTANCE Lapp/softwork/cloudkitclient/types/Reference$$serializer;
1094-
public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor;
1095+
public final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor;
1096+
public synthetic fun <init> (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V
10951097
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
10961098
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/softwork/cloudkitclient/types/Reference;
10971099
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
@@ -1127,7 +1129,7 @@ public final class app/softwork/cloudkitclient/types/Reference$Action$Companion
11271129
}
11281130

11291131
public final class app/softwork/cloudkitclient/types/Reference$Companion {
1130-
public final fun serializer ()Lkotlinx/serialization/KSerializer;
1132+
public final fun serializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;
11311133
}
11321134

11331135
public abstract class app/softwork/cloudkitclient/values/Value {
@@ -1383,8 +1385,8 @@ public final class app/softwork/cloudkitclient/values/Value$Reference : app/soft
13831385
}
13841386

13851387
public final class app/softwork/cloudkitclient/values/Value$Reference$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
1386-
public static final field INSTANCE Lapp/softwork/cloudkitclient/values/Value$Reference$$serializer;
1387-
public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor;
1388+
public final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor;
1389+
public synthetic fun <init> (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V
13881390
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
13891391
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/softwork/cloudkitclient/values/Value$Reference;
13901392
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
@@ -1395,7 +1397,7 @@ public final class app/softwork/cloudkitclient/values/Value$Reference$$serialize
13951397
}
13961398

13971399
public final class app/softwork/cloudkitclient/values/Value$Reference$Companion {
1398-
public final fun serializer ()Lkotlinx/serialization/KSerializer;
1400+
public final fun serializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;
13991401
}
14001402

14011403
public final class app/softwork/cloudkitclient/values/Value$String : app/softwork/cloudkitclient/values/Value {

cloudkitclient-core/src/commonMain/kotlin/app/softwork/cloudkitclient/Filter.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package app.softwork.cloudkitclient
22

3+
import app.softwork.cloudkitclient.types.*
34
import app.softwork.cloudkitclient.values.*
45
import kotlinx.serialization.*
56
import kotlin.reflect.*
@@ -48,10 +49,20 @@ public data class Filter(
4849

4950
public class Builder<F : Record.Fields> {
5051

51-
public infix fun KProperty1<F, Value.String?>.eq(value: kotlin.String) {
52+
public infix fun KProperty1<F, Value.String?>.eq(value: String) {
5253
filters.add(Filter(fieldName = name, comparator = Comparator.EQUALS, fieldValue = Value.String(value)))
5354
}
5455

56+
public infix fun <TF : Record.Fields, TR : Record<TF>> KProperty1<F, Value.Reference<TF, TR>>.eq(value: TR) {
57+
filters.add(
58+
Filter(
59+
fieldName = name, comparator = Comparator.EQUALS, fieldValue = Value.Reference<TF, TR>(
60+
Reference(value.recordName, action = Reference.Action.None)
61+
)
62+
)
63+
)
64+
}
65+
5566
private val filters = mutableListOf<Filter>()
5667

5768
public fun build(): List<Filter> = filters

cloudkitclient-core/src/commonMain/kotlin/app/softwork/cloudkitclient/types/Reference.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package app.softwork.cloudkitclient.types
22

3-
import app.softwork.cloudkitclient.ZoneID
4-
import kotlinx.serialization.SerialName
5-
import kotlinx.serialization.Serializable
3+
import app.softwork.cloudkitclient.*
4+
import kotlinx.serialization.*
65

76
@Serializable
8-
public data class Reference(val recordName: String, val zoneID: ZoneID, val action: Action) {
7+
public data class Reference<F : Record.Fields, TargetRecord : Record<F>>(
8+
val recordName: String,
9+
val zoneID: ZoneID? = null,
10+
val action: Action
11+
) {
912
@Serializable
1013
public enum class Action {
1114
@SerialName("None")

cloudkitclient-core/src/commonMain/kotlin/app/softwork/cloudkitclient/values/Value.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package app.softwork.cloudkitclient.values
22

3+
import app.softwork.cloudkitclient.*
34
import app.softwork.cloudkitclient.internal.*
45
import kotlinx.datetime.*
56
import kotlinx.serialization.*
@@ -45,7 +46,9 @@ public sealed class Value {
4546

4647
@Serializable
4748
@SerialName("REFERENCE")
48-
public data class Reference(val value: app.softwork.cloudkitclient.types.Reference) : Value()
49+
public data class Reference<F : Record.Fields, TargetRecord : Record<F>>(
50+
val value: app.softwork.cloudkitclient.types.Reference<F, TargetRecord>
51+
) : Value()
4952

5053

5154
@Serializable

cloudkitclient-testing/src/commonMain/kotlin/app/softwork/cloudkitclient/Storage.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,11 @@ public class Storage(
225225
}
226226
}
227227
is Value.Location -> TODO()
228-
is Value.Reference -> {
229-
require(otherValue is Reference)
228+
is Value.Reference<*, *> -> {
229+
require(otherValue is Reference<*, *>)
230230
when (comparator) {
231-
EQUALS -> TODO()
232-
NOT_EQUALS -> TODO()
231+
EQUALS -> value.recordName == otherValue.value.recordName
232+
NOT_EQUALS -> value.recordName != otherValue.value.recordName
233233
LESS_THAN -> TODO()
234234
LESS_THAN_OR_EQUALS -> TODO()
235235
GREATER_THAN -> TODO()

0 commit comments

Comments
 (0)