From 247e30beedd5d6e55d8c53cb9356b278ed02ec3a Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 30 Jan 2026 07:31:38 -0300 Subject: [PATCH] fix Jackson deserialization for empty Filters and add regression test --- .../nip01Core/relay/filters/FilterDeserializer.kt | 14 +++++++------- .../quartz/nip01Core/jackson/JacksonMapperTest.kt | 9 +++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/FilterDeserializer.kt b/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/FilterDeserializer.kt index 556dda5de..5bf629536 100644 --- a/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/FilterDeserializer.kt +++ b/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/FilterDeserializer.kt @@ -52,15 +52,15 @@ class ManualFilterDeserializer { } return Filter( - ids = jsonObject.get("ids").mapNotNull { it.asTextOrNull() }, - authors = jsonObject.get("authors").mapNotNull { it.asTextOrNull() }, - kinds = jsonObject.get("kinds").mapNotNull { it.asIntOrNull() }, + ids = jsonObject.get("ids")?.mapNotNull { it.asTextOrNull() }, + authors = jsonObject.get("authors")?.mapNotNull { it.asTextOrNull() }, + kinds = jsonObject.get("kinds")?.mapNotNull { it.asIntOrNull() }, tags = tagsIn.associateWith { jsonObject.get(it).mapNotNull { it.asTextOrNull() } }, tagsAll = tagsAll.associateWith { jsonObject.get(it).mapNotNull { it.asTextOrNull() } }, - since = jsonObject.get("since").asLongOrNull(), - until = jsonObject.get("until").asLongOrNull(), - limit = jsonObject.get("limit").asIntOrNull(), - search = jsonObject.get("search").asTextOrNull(), + since = jsonObject.get("since")?.asLongOrNull(), + until = jsonObject.get("until")?.asLongOrNull(), + limit = jsonObject.get("limit")?.asIntOrNull(), + search = jsonObject.get("search")?.asTextOrNull(), ) } } diff --git a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/jackson/JacksonMapperTest.kt b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/jackson/JacksonMapperTest.kt index b9cc65956..252b21789 100644 --- a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/jackson/JacksonMapperTest.kt +++ b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/jackson/JacksonMapperTest.kt @@ -21,6 +21,7 @@ package com.vitorpamplona.quartz.nip01Core.jackson import com.vitorpamplona.quartz.nip01Core.core.Event +import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip01Core.signers.EventTemplate import com.vitorpamplona.quartz.nip51Lists.followList.FollowListEvent import com.vitorpamplona.quartz.nip59Giftwrap.rumors.Rumor @@ -152,4 +153,12 @@ class JacksonMapperTest { assertContentEquals(tag, deserialized.tags[index]) } } + + @Test + fun shouldNotThrowExceptionWhenDeserializingEmptyFilter() { + val json = Filter().toJson() + val deserialized = JacksonMapper.fromJsonTo(json) + + assertEquals(deserialized.ids, null) + } }