diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/deserializers/SequenceDeserializer.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/deserializers/SequenceDeserializer.kt new file mode 100644 index 000000000..926212568 --- /dev/null +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/deserializers/SequenceDeserializer.kt @@ -0,0 +1,14 @@ +package com.fasterxml.jackson.module.kotlin.deserializers + +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.deser.std.StdDeserializer + +/** + * @author Konstantin Volivach + */ +class SequenceDeserializer : StdDeserializer>(Sequence::class.java) { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Sequence<*> { + return ctxt.readValue(p, List::class.java).asSequence() + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/serializers/SequenceSerializer.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/serializers/SequenceSerializer.kt new file mode 100644 index 000000000..069f1f394 --- /dev/null +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/serializers/SequenceSerializer.kt @@ -0,0 +1,14 @@ +package com.fasterxml.jackson.module.kotlin.serializers + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.databind.SerializerProvider +import com.fasterxml.jackson.databind.ser.std.StdSerializer + +/** + * @author Konstantin Volivach + */ +class SequenceSerializer : StdSerializer>(Sequence::class.java) { + override fun serialize(value: Sequence<*>, gen: JsonGenerator, provider: SerializerProvider) { + provider.defaultSerializeValue(value.toList(), gen) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/deserializers/SequenceDeserializerTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/deserializers/SequenceDeserializerTest.kt new file mode 100644 index 000000000..27574c85b --- /dev/null +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/deserializers/SequenceDeserializerTest.kt @@ -0,0 +1,37 @@ +package com.fasterxml.jackson.module.kotlin.test.deserializers + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import com.fasterxml.jackson.module.kotlin.KotlinModule +import com.fasterxml.jackson.module.kotlin.deserializers.SequenceDeserializer +import com.fasterxml.jackson.module.kotlin.readValue +import org.junit.Test +import kotlin.test.assertEquals + +/** + * @author Konstantin Volivach + */ +class SequenceDeserializerTest { + data class Data( + @field:JsonDeserialize(using = SequenceDeserializer::class) + val value: Sequence + ) + + @Test + fun deserializeSequence() { + val list = listOf("Test", "Test1") + val objectMapper = ObjectMapper() + objectMapper.registerModule(KotlinModule()) + val result = objectMapper.readValue("{\"value\":[\"Test\",\"Test1\"]}") + assertEquals(list, result.value.toList()) + } + + @Test + fun deserializeEmptySequence() { + val list = listOf() + val objectMapper = ObjectMapper() + objectMapper.registerModule(KotlinModule()) + val result = objectMapper.readValue("{\"value\":[]}") + assertEquals(list, result.value.toList()) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/serializers/SequenceSerializerTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/serializers/SequenceSerializerTest.kt new file mode 100644 index 000000000..24ef29490 --- /dev/null +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/serializers/SequenceSerializerTest.kt @@ -0,0 +1,42 @@ +package com.fasterxml.jackson.module.kotlin.test.serializers + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.annotation.JsonSerialize +import com.fasterxml.jackson.module.kotlin.KotlinModule +import com.fasterxml.jackson.module.kotlin.serializers.SequenceSerializer +import org.junit.Test +import kotlin.test.assertEquals + +/** + * @author Konstantin Volivach + */ +class SequenceSerializerTest { + + data class Data( + @field:JsonSerialize(using = SequenceSerializer::class) + val value: Sequence + ) + + @Test + fun testSerializeSequence() { + val sequence = listOf("Test", "Test1").asSequence() + val data = Data( + sequence + ) + val objectMapper = ObjectMapper() + objectMapper.registerModule(KotlinModule()) + val result = objectMapper.writeValueAsString(data) + assertEquals("{\"value\":[\"Test\",\"Test1\"]}", result) + } + + @Test + fun testSerializeEmptySequence() { + val sequence = listOf().asSequence() + val data = Data( + sequence + ) + val objectMapper = ObjectMapper() + val result = objectMapper.writeValueAsString(data) + assertEquals("{\"value\":[]}", result) + } +} \ No newline at end of file