@@ -16,6 +16,7 @@ import kotlinx.serialization.json.jsonObject
1616import kotlinx.serialization.json.jsonPrimitive
1717import kotlinx.serialization.json.put
1818import kotlinx.serialization.json.putJsonArray
19+ import kotlinx.serialization.json.putJsonObject
1920
2021interface Serializer <in T : Filter <out Any ?>> {
2122 fun JsonObjectBuilder.serialize (filter : T ) {}
@@ -103,26 +104,45 @@ class GroupSerializer(override val serializer: FilterSerializer) : Serializer<Fi
103104 override val clazz = Filter .Group ::class
104105
105106 override fun JsonObjectBuilder.serialize (filter : Filter .Group <Any ?>) {
106- putJsonArray(Serializer .STATE ) {
107- filter.state.forEach { state ->
108- @Suppress(" UNCHECKED_CAST" )
109- add((state as ? Filter <Any ?>)?.let { serializer.serialize(it) } ? : JsonNull )
107+ putJsonObject(VALUES ) {
108+ filter.state.forEach { item ->
109+ @Suppress(" UNCHECKED_CAST" , " SafeCastWithReturn" )
110+ item as ? Filter <Any ?> ? : return @forEach
111+ // Assuming `item.name` is unique, not sure if it is tho...
112+ put(item.name, serializer.serialize(item))
110113 }
111114 }
112115 }
113116
114117 override fun deserialize (json : JsonObject , filter : Filter .Group <Any ?>) {
115- json[Serializer .STATE ]!! .jsonArray.forEachIndexed { index, element ->
116- if (element == JsonNull ) return @forEachIndexed
118+ val values = json[VALUES ]?.jsonObject
119+ if (values == null ) {
120+ // TODO: Delete later
121+ json[Serializer .STATE ]?.jsonArray?.forEachIndexed { index, element ->
122+ if (element == JsonNull ) return @forEachIndexed
123+
124+ @Suppress(" UNCHECKED_CAST" )
125+ serializer.deserialize(filter.state[index] as Filter <Any ?>, element.jsonObject)
126+ }
127+ return
128+ }
117129
118- @Suppress(" UNCHECKED_CAST" )
119- serializer.deserialize(filter.state[index] as Filter <Any ?>, element.jsonObject)
130+ filter.state.forEach { item ->
131+ @Suppress(" UNCHECKED_CAST" , " SafeCastWithReturn" )
132+ item as ? Filter <Any ?> ? : return @forEach
133+
134+ val itemJson = values[item.name]?.jsonObject ? : return @forEach
135+ serializer.deserialize(item, itemJson)
120136 }
121137 }
122138
123139 override fun mappings () = listOf (
124140 Serializer .NAME to Filter .Group <Any ?>::name,
125141 )
142+
143+ companion object {
144+ const val VALUES = " values"
145+ }
126146}
127147
128148class SortSerializer (override val serializer : FilterSerializer ) : Serializer<Filter.Sort> {
0 commit comments