Skip to content

Commit 21c74d0

Browse files
committed
Add sequence serializer and deserializer
1 parent c8973d5 commit 21c74d0

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.fasterxml.jackson.module.kotlin.deserializers
2+
3+
import com.fasterxml.jackson.core.JsonParser
4+
import com.fasterxml.jackson.databind.DeserializationContext
5+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
6+
7+
/**
8+
* @author Konstantin Volivach
9+
*/
10+
class SequenceDeserializer : StdDeserializer<Sequence<*>>(Sequence::class.java) {
11+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Sequence<*> {
12+
return ctxt.readValue(p, List::class.java).asSequence()
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.fasterxml.jackson.module.kotlin.serializers
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.SerializerProvider
5+
import com.fasterxml.jackson.databind.ser.std.StdSerializer
6+
7+
/**
8+
* @author Konstantin Volivach
9+
*/
10+
class SequenceSerializer : StdSerializer<Sequence<*>>(Sequence::class.java) {
11+
override fun serialize(value: Sequence<*>, gen: JsonGenerator, provider: SerializerProvider) {
12+
provider.defaultSerializeValue(value.toList(), gen)
13+
}
14+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.fasterxml.jackson.module.kotlin.test.deserializers
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper
4+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
5+
import com.fasterxml.jackson.module.kotlin.KotlinModule
6+
import com.fasterxml.jackson.module.kotlin.deserializers.SequenceDeserializer
7+
import com.fasterxml.jackson.module.kotlin.readValue
8+
import org.junit.Test
9+
import kotlin.test.assertEquals
10+
11+
/**
12+
* @author Konstantin Volivach
13+
*/
14+
class SequenceDeserializerTest {
15+
data class Data(
16+
@field:JsonDeserialize(using = SequenceDeserializer::class)
17+
val value: Sequence<String>
18+
)
19+
20+
@Test
21+
fun deserializeSequence() {
22+
val list = listOf("Test", "Test1")
23+
val objectMapper = ObjectMapper()
24+
objectMapper.registerModule(KotlinModule())
25+
val result = objectMapper.readValue<Data>("{\"value\":[\"Test\",\"Test1\"]}")
26+
assertEquals(list, result.value.toList())
27+
}
28+
29+
@Test
30+
fun deserializeEmptySequence() {
31+
val list = listOf<String>()
32+
val objectMapper = ObjectMapper()
33+
objectMapper.registerModule(KotlinModule())
34+
val result = objectMapper.readValue<Data>("{\"value\":[]}")
35+
assertEquals(list, result.value.toList())
36+
}
37+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.fasterxml.jackson.module.kotlin.test.serializers
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper
4+
import com.fasterxml.jackson.databind.annotation.JsonSerialize
5+
import com.fasterxml.jackson.module.kotlin.KotlinModule
6+
import com.fasterxml.jackson.module.kotlin.serializers.SequenceSerializer
7+
import org.junit.Test
8+
import kotlin.test.assertEquals
9+
10+
/**
11+
* @author Konstantin Volivach
12+
*/
13+
class SequenceSerializerTest {
14+
15+
data class Data(
16+
@field:JsonSerialize(using = SequenceSerializer::class)
17+
val value: Sequence<String>
18+
)
19+
20+
@Test
21+
fun testSerializeSequence() {
22+
val sequence = listOf("Test", "Test1").asSequence()
23+
val data = Data(
24+
sequence
25+
)
26+
val objectMapper = ObjectMapper()
27+
objectMapper.registerModule(KotlinModule())
28+
val result = objectMapper.writeValueAsString(data)
29+
assertEquals("{\"value\":[\"Test\",\"Test1\"]}", result)
30+
}
31+
32+
@Test
33+
fun testSerializeEmptySequence() {
34+
val sequence = listOf<String>().asSequence()
35+
val data = Data(
36+
sequence
37+
)
38+
val objectMapper = ObjectMapper()
39+
val result = objectMapper.writeValueAsString(data)
40+
assertEquals("{\"value\":[]}", result)
41+
}
42+
}

0 commit comments

Comments
 (0)