Skip to content

Commit 9435ad5

Browse files
authored
Support ScalaModule.builder() (#713)
* Support ScalaModule.builder() tests * Update ScalaModuleTest.scala * Create ScalaModule3Test.scala * Update ScalaModule3Test.scala
1 parent 58e49df commit 9435ad5

File tree

17 files changed

+146
-1
lines changed

17 files changed

+146
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.fasterxml.jackson.module.scala
2+
3+
private[scala] object BuiltinModules {
4+
def addScalaVersionSpecificModules(builder: ScalaModule.Builder): ScalaModule.Builder = builder
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.fasterxml.jackson.module.scala
2+
3+
private[scala] object BuiltinModules {
4+
def addScalaVersionSpecificModules(builder: ScalaModule.Builder): ScalaModule.Builder = {
5+
builder.addModule(EnumModule)
6+
builder
7+
}
8+
}

src/main/scala/com/fasterxml/jackson/module/scala/EitherModule.scala

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ import com.fasterxml.jackson.module.scala.ser.EitherSerializerModule
55

66
trait EitherModule extends EitherDeserializerModule with EitherSerializerModule {
77
override def getModuleName: String = "EitherModule"
8-
}
8+
}
9+
10+
object EitherModule extends EitherModule

src/main/scala/com/fasterxml/jackson/module/scala/EnumerationModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ import com.fasterxml.jackson.module.scala.ser.EnumerationSerializerModule
99
trait EnumerationModule extends EnumerationSerializerModule with EnumerationDeserializerModule {
1010
override def getModuleName: String = "EnumerationModule"
1111
}
12+
13+
object EnumerationModule extends EnumerationModule

src/main/scala/com/fasterxml/jackson/module/scala/IterableModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ import com.fasterxml.jackson.module.scala.ser.IterableSerializerModule
88
trait IterableModule extends IterableSerializerModule {
99
override def getModuleName: String = "IterableModule"
1010
}
11+
12+
object IterableModule extends IterableModule

src/main/scala/com/fasterxml/jackson/module/scala/IteratorModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ import com.fasterxml.jackson.module.scala.ser.IteratorSerializerModule
55
trait IteratorModule extends IteratorSerializerModule {
66
override def getModuleName: String = "IteratorModule"
77
}
8+
9+
object IteratorModule extends IteratorModule

src/main/scala/com/fasterxml/jackson/module/scala/MapModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ trait MapModule
99
with SortedMapDeserializerModule {
1010
override def getModuleName: String = "MapModule"
1111
}
12+
13+
object MapModule extends MapModule

src/main/scala/com/fasterxml/jackson/module/scala/OptionModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ import com.fasterxml.jackson.module.scala.ser.OptionSerializerModule
99
trait OptionModule extends OptionSerializerModule with OptionDeserializerModule {
1010
override def getModuleName: String = "OptionModule"
1111
}
12+
13+
object OptionModule extends OptionModule
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.fasterxml.jackson.module.scala
2+
3+
import com.fasterxml.jackson.databind.Module.SetupContext
4+
import com.fasterxml.jackson.module.scala.deser.{ScalaNumberDeserializersModule, ScalaObjectDeserializerModule, UntypedObjectDeserializerModule}
5+
import com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule
6+
7+
object ScalaModule {
8+
9+
class Builder {
10+
private val modules = scala.collection.mutable.Buffer[JacksonModule]()
11+
12+
def addModule(module: JacksonModule): Builder = {
13+
modules.+=(module)
14+
this
15+
}
16+
17+
def removeModule(module: JacksonModule): Builder = {
18+
modules.-=(module)
19+
this
20+
}
21+
22+
def hasModule(module: JacksonModule): Boolean = {
23+
modules.contains(module)
24+
}
25+
26+
def addAllBuiltinModules(): Builder = {
27+
addModule(IteratorModule)
28+
addModule(EnumerationModule)
29+
addModule(OptionModule)
30+
addModule(SeqModule)
31+
addModule(IterableModule)
32+
addModule(TupleModule)
33+
addModule(MapModule)
34+
addModule(SetModule)
35+
addModule(ScalaNumberDeserializersModule)
36+
addModule(ScalaAnnotationIntrospectorModule)
37+
addModule(ScalaObjectDeserializerModule)
38+
addModule(UntypedObjectDeserializerModule)
39+
addModule(EitherModule)
40+
addModule(SymbolModule)
41+
BuiltinModules.addScalaVersionSpecificModules(this)
42+
this
43+
}
44+
45+
def build(): JacksonModule = new JacksonModule {
46+
override def setupModule(context: SetupContext): Unit = {
47+
modules.foreach(_.setupModule(context))
48+
}
49+
}
50+
}
51+
52+
def builder(): Builder = new Builder()
53+
}
54+

src/main/scala/com/fasterxml/jackson/module/scala/SeqModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ import com.fasterxml.jackson.module.scala.ser.IterableSerializerModule
99
trait SeqModule extends IterableSerializerModule with SeqDeserializerModule {
1010
override def getModuleName: String = "SeqModule"
1111
}
12+
13+
object SeqModule extends SeqModule

src/main/scala/com/fasterxml/jackson/module/scala/SetModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ import com.fasterxml.jackson.module.scala.deser.{SortedSetDeserializerModule, Un
55
trait SetModule extends UnsortedSetDeserializerModule with SortedSetDeserializerModule {
66
override def getModuleName: String = "SetModule"
77
}
8+
9+
object SetModule extends SetModule

src/main/scala/com/fasterxml/jackson/module/scala/SymbolModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ import com.fasterxml.jackson.module.scala.ser.SymbolSerializerModule
99
trait SymbolModule extends SymbolSerializerModule with SymbolDeserializerModule {
1010
override def getModuleName: String = "SymbolModule"
1111
}
12+
13+
object SymbolModule extends SymbolModule

src/main/scala/com/fasterxml/jackson/module/scala/TupleModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ import com.fasterxml.jackson.module.scala.ser.TupleSerializerModule
99
trait TupleModule extends TupleSerializerModule with TupleDeserializerModule {
1010
override def getModuleName: String = "TupleModule"
1111
}
12+
13+
object TupleModule extends TupleModule

src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaNumberDeserializersModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@ trait ScalaNumberDeserializersModule extends JacksonModule {
4545
override def getModuleName: String = "ScalaNumberDeserializersModule"
4646
this += NumberDeserializers
4747
}
48+
49+
object ScalaNumberDeserializersModule extends ScalaNumberDeserializersModule

src/main/scala/com/fasterxml/jackson/module/scala/deser/UntypedObjectDeserializerModule.scala

+2
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,5 @@ trait UntypedObjectDeserializerModule extends JacksonModule {
5353
override def getModuleName: String = "UntypedObjectDeserializerModule"
5454
this += (_ addDeserializers UntypedObjectDeserializerResolver)
5555
}
56+
57+
object UntypedObjectDeserializerModule extends UntypedObjectDeserializerModule
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.fasterxml.jackson.module.scala
2+
3+
class ScalaModule3Test extends BaseSpec {
4+
"A ScalaModule builder" should "support addAllBuiltinModules" in {
5+
val cfg = ScalaModule.builder().addAllBuiltinModules()
6+
// ScalaModuleTest tests the modules that work in Scala 2 and 3
7+
// here we test the Scala3 specific classes
8+
cfg.hasModule(EnumModule) shouldBe true
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.fasterxml.jackson.module.scala
2+
3+
import com.fasterxml.jackson.databind.json.JsonMapper
4+
import com.fasterxml.jackson.module.scala.deser.{ScalaNumberDeserializersModule, ScalaObjectDeserializerModule, UntypedObjectDeserializerModule}
5+
import com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospectorModule
6+
7+
class ScalaModuleTest extends BaseSpec {
8+
"A ScalaModule builder" should "support addAllBuiltinModules" in {
9+
val cfg = ScalaModule.builder().addAllBuiltinModules()
10+
cfg.hasModule(IteratorModule) shouldBe true
11+
cfg.hasModule(IterableModule) shouldBe true
12+
cfg.hasModule(EnumerationModule) shouldBe true
13+
cfg.hasModule(EitherModule) shouldBe true
14+
cfg.hasModule(OptionModule) shouldBe true
15+
cfg.hasModule(MapModule) shouldBe true
16+
cfg.hasModule(SeqModule) shouldBe true
17+
cfg.hasModule(SetModule) shouldBe true
18+
cfg.hasModule(TupleModule) shouldBe true
19+
cfg.hasModule(ScalaAnnotationIntrospectorModule) shouldBe true
20+
cfg.hasModule(ScalaNumberDeserializersModule) shouldBe true
21+
cfg.hasModule(ScalaObjectDeserializerModule) shouldBe true
22+
cfg.hasModule(SymbolModule) shouldBe true
23+
cfg.hasModule(UntypedObjectDeserializerModule) shouldBe true
24+
}
25+
it should "support removeModule" in {
26+
val builder = ScalaModule.builder()
27+
.addAllBuiltinModules()
28+
.removeModule(SymbolModule)
29+
30+
builder.hasModule(UntypedObjectDeserializerModule) shouldBe true
31+
builder.hasModule(SymbolModule) shouldBe false
32+
33+
builder.build() shouldBe a[JacksonModule]
34+
}
35+
it should "support registering custom module in JsonMapper" in {
36+
val builder = ScalaModule.builder()
37+
.addAllBuiltinModules()
38+
val mapper = JsonMapper.builder()
39+
.addModule(builder.build())
40+
.build()
41+
val result = mapper.writeValueAsString(Symbol("symbol"))
42+
result should be (""""symbol"""")
43+
}
44+
}

0 commit comments

Comments
 (0)