Skip to content

Commit f5b92f6

Browse files
committed
JsonNullable asOptional etc.
1 parent 516d96e commit f5b92f6

File tree

4 files changed

+40
-11
lines changed

4 files changed

+40
-11
lines changed

core/src/jacksonTest/kotlin/no/nav/hjelpemidler/domain/serialization/JsonNullableJacksonTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ import io.kotest.assertions.assertSoftly
55
import io.kotest.matchers.shouldBe
66
import no.nav.hjelpemidler.domain.enhet.Enhet
77
import no.nav.hjelpemidler.domain.enhet.Enhetsnummer
8+
import no.nav.hjelpemidler.domain.id.numberId
9+
import no.nav.hjelpemidler.domain.id.numberIdJsonString
10+
import no.nav.hjelpemidler.domain.id.stringId
11+
import no.nav.hjelpemidler.domain.id.stringIdJsonString
12+
import no.nav.hjelpemidler.domain.id.uuidId
13+
import no.nav.hjelpemidler.domain.id.uuidIdJsonString
814
import no.nav.hjelpemidler.domain.person.Fødselsnummer
915
import no.nav.hjelpemidler.domain.person.år
1016
import no.nav.hjelpemidler.serialization.jackson.jsonToValue
@@ -62,6 +68,10 @@ class JsonNullableJacksonTest {
6268
valueToJson(JsonNullable.Undefined) shouldBe "null"
6369
valueToJson(JsonNullable.Null) shouldBe "null"
6470
valueToJson(JsonNullable.of("test")) shouldBe "test".doubleQuoted()
71+
72+
valueToJson(JsonNullable.of(numberId)) shouldBe numberIdJsonString
73+
valueToJson(JsonNullable.of(stringId)) shouldBe stringIdJsonString
74+
valueToJson(JsonNullable.of(uuidId)) shouldBe uuidIdJsonString
6575
}
6676

6777
@JsonInclude(JsonInclude.Include.NON_EMPTY)

core/src/main/kotlin/no/nav/hjelpemidler/domain/serialization/JsonNullable.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package no.nav.hjelpemidler.domain.serialization
22

3+
import java.util.Optional
4+
35
sealed interface JsonNullable<out T> {
46
data object Undefined : JsonNullable<Nothing>
57

@@ -13,3 +15,9 @@ sealed interface JsonNullable<out T> {
1315
fun <T> of(value: T?): JsonNullable<T> = Present(value)
1416
}
1517
}
18+
19+
fun <T> JsonNullable<T>?.asOptional(): Optional<T & Any> = if (this is JsonNullable.Present) {
20+
Optional.ofNullable<T>(value)
21+
} else {
22+
Optional.empty<T>()
23+
}

core/src/main/kotlin/no/nav/hjelpemidler/domain/serialization/JsonNullableJackson.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.hjelpemidler.domain.serialization
22

3+
import no.nav.hjelpemidler.domain.id.Id
34
import tools.jackson.core.JsonGenerator
45
import tools.jackson.core.JsonParser
56
import tools.jackson.databind.BeanProperty
@@ -43,19 +44,21 @@ internal class JsonNullableSerializer : StdSerializer<JsonNullable<*>> {
4344
if (value !is JsonNullable.Present || value.value == null) {
4445
generator.writeNull()
4546
} else if (childSerializer == null) {
46-
when (value.value) {
47-
is Boolean -> generator.writeBoolean(value.value)
47+
when (val v = value.value) {
48+
is Boolean -> generator.writeBoolean(v)
4849

49-
is String -> generator.writeString(value.value)
50+
is String -> generator.writeString(v)
5051

51-
is Int -> generator.writeNumber(value.value)
52-
is Long -> generator.writeNumber(value.value)
53-
is Float -> generator.writeNumber(value.value)
54-
is Double -> generator.writeNumber(value.value)
55-
is BigInteger -> generator.writeNumber(value.value)
56-
is BigDecimal -> generator.writeNumber(value.value)
52+
is Int -> generator.writeNumber(v)
53+
is Long -> generator.writeNumber(v)
54+
is Float -> generator.writeNumber(v)
55+
is Double -> generator.writeNumber(v)
56+
is BigInteger -> generator.writeNumber(v)
57+
is BigDecimal -> generator.writeNumber(v)
5758

58-
else -> generator.writePOJO(value.value)
59+
is Id<*> -> generator.writeString(v.toString())
60+
61+
else -> generator.writePOJO(v)
5962
}
6063
} else {
6164
childSerializer.serialize(value.value, generator, context)

database/src/main/kotlin/no/nav/hjelpemidler/database/QueryParameters.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package no.nav.hjelpemidler.database
22

33
import no.nav.hjelpemidler.domain.ValueType
4+
import no.nav.hjelpemidler.domain.kodeverk.Kodeverk
5+
import no.nav.hjelpemidler.domain.serialization.JsonNullable
6+
import no.nav.hjelpemidler.domain.serialization.asOptional
7+
import java.util.Optional
8+
import kotlin.jvm.optionals.getOrNull
49

510
interface QueryParameter<out T> {
611
val queryParameter: T
@@ -32,9 +37,12 @@ internal fun QueryParameters.prepare(): QueryParameters = mapValues { (_, value)
3237
when (value) {
3338
is String -> value // String er også CharSequence
3439
is CharSequence -> value.toString()
35-
is Enum<*> -> value.name
40+
is JsonNullable<*> -> value.asOptional().getOrNull()
41+
is Optional<*> -> value.getOrNull()
3642
is QueryParameter<*> -> value.queryParameter
3743
is ValueType<*> -> value.value
44+
is Kodeverk<*> -> value.name
45+
is Enum<*> -> value.name
3846
else -> value
3947
}
4048
}

0 commit comments

Comments
 (0)