Skip to content

Commit cbc54d7

Browse files
authored
Merge pull request #408 from ProjectMapK/porting-kotlin1085
Added addMixIn function for generic MapperBuilder
2 parents 2b54fa4 + 7af4085 commit cbc54d7

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

src/main/kotlin/io/github/projectmapk/jackson/module/kogera/Extensions.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.Module
1111
import com.fasterxml.jackson.databind.ObjectMapper
1212
import com.fasterxml.jackson.databind.ObjectReader
1313
import com.fasterxml.jackson.databind.RuntimeJsonMappingException
14+
import com.fasterxml.jackson.databind.cfg.MapperBuilder
1415
import com.fasterxml.jackson.databind.cfg.MutableConfigOverride
1516
import com.fasterxml.jackson.databind.json.JsonMapper
1617
import com.fasterxml.jackson.databind.module.SimpleModule
@@ -200,6 +201,7 @@ public inline fun <reified T, reified U> JsonMapper.Builder.addMixIn(): JsonMapp
200201
T::class.java,
201202
U::class.java,
202203
)
204+
public inline fun <M : MapperBuilder<*, M>, reified T, reified U> M.addMixIn(): M = this.addMixIn(T::class.java, U::class.java)
203205

204206
public operator fun ArrayNode.plus(element: Boolean) {
205207
add(element)

src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/ExtensionMethodsTests.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
55
import com.fasterxml.jackson.databind.SerializationFeature
66
import com.fasterxml.jackson.databind.json.JsonMapper
77
import com.fasterxml.jackson.databind.node.JsonNodeFactory
8+
import com.fasterxml.jackson.dataformat.csv.CsvMapper
89
import io.github.projectmapk.jackson.module.kogera.addMixIn
910
import io.github.projectmapk.jackson.module.kogera.contains
1011
import io.github.projectmapk.jackson.module.kogera.convertValue
@@ -101,4 +102,17 @@ private class TestExtensionMethods {
101102

102103
assertEquals("{}", serializedPerson)
103104
}
105+
106+
@Test fun mixInExtensionForGenericMapperBuilderTest() {
107+
data class Person(val name: String)
108+
abstract class PersonMixIn { @JsonIgnore var name: String = "" }
109+
110+
// Assigned to a temporary variable to ensure that addMixIn returns a builder with the proper type
111+
val mapperBuilder: CsvMapper.Builder = CsvMapper.builder()
112+
.addMixIn<_, Person, PersonMixIn>()
113+
val mapper: CsvMapper = mapperBuilder.build()
114+
val serializedPerson: String = mapper.writeValueAsString(Person("test"))
115+
116+
assertEquals("", serializedPerson)
117+
}
104118
}

0 commit comments

Comments
 (0)