Skip to content

Commit 92a9c03

Browse files
committed
Disallow 'discriminatorFieldName' to be 'None' when 'alwaysEmitDiscriminator' is 'true'
1 parent 9c98fbe commit 92a9c03

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

jsoniter-scala-macros/shared/src/main/scala-2/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMaker.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,8 @@ object JsonCodecMaker {
582582
fail("'requireDefaultFields' and 'transientDefault' cannot be 'true' simultaneously")
583583
if (cfg.circeLikeObjectEncoding && cfg.discriminatorFieldName.nonEmpty)
584584
fail("'discriminatorFieldName' should be 'None' when 'circeLikeObjectEncoding' is 'true'")
585+
if (cfg.alwaysEmitDiscriminator && cfg.discriminatorFieldName.isEmpty)
586+
fail("'discriminatorFieldName' should not be 'None' when 'alwaysEmitDiscriminator' is 'true'")
585587
if (cfg.decodingOnly && cfg.encodingOnly)
586588
fail("'decodingOnly' and 'encodingOnly' cannot be 'true' simultaneously")
587589
cfg

jsoniter-scala-macros/shared/src/main/scala-3/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMaker.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,8 @@ object JsonCodecMaker {
728728
report.errorAndAbort("'requireDefaultFields' and 'transientDefault' cannot be 'true' simultaneously")
729729
if (cfg.circeLikeObjectEncoding && cfg.discriminatorFieldName.nonEmpty)
730730
report.errorAndAbort("'discriminatorFieldName' should be 'None' when 'circeLikeObjectEncoding' is 'true'")
731+
if (cfg.alwaysEmitDiscriminator && cfg.discriminatorFieldName.isEmpty)
732+
report.errorAndAbort("'discriminatorFieldName' should not be 'None' when 'alwaysEmitDiscriminator' is 'true'")
731733
if (cfg.decodingOnly && cfg.encodingOnly)
732734
report.errorAndAbort("'decodingOnly' and 'encodingOnly' cannot be 'true' simultaneously")
733735
cfg

jsoniter-scala-macros/shared/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMakerSpec.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2249,6 +2249,15 @@ class JsonCodecMakerSpec extends VerifyingSpec {
22492249
"""{"type":"CCC","a":1,"b":"VVV"}""")
22502250
verifySerDeser(make[DDD.type](CodecMakerConfig.withAlwaysEmitDiscriminator(true)), DDD, """{"type":"DDD"}""")
22512251
}
2252+
"don't generate codecs for CodecMakerConfig.withDiscriminatorFieldName(_root_.scala.None).withAlwaysEmitDiscriminator(true) compile-time configuration" in {
2253+
assert(intercept[TestFailedException](assertCompiles {
2254+
"""sealed trait A
2255+
|case class B(y: Int) extends A
2256+
|JsonCodecMaker.make[B](CodecMakerConfig.withDiscriminatorFieldName(_root_.scala.None).withAlwaysEmitDiscriminator(true))""".stripMargin
2257+
}).getMessage.contains {
2258+
"'discriminatorFieldName' should not be 'None' when 'alwaysEmitDiscriminator' is 'true'"
2259+
})
2260+
}
22522261
"deserialize ADTs with extra fields" in {
22532262
sealed trait Base
22542263

0 commit comments

Comments
 (0)