File tree Expand file tree Collapse file tree 2 files changed +20
-2
lines changed
main/scala/io/bullet/borer/derivation
test/scala/io/bullet/borer/derivation Expand file tree Collapse file tree 2 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -246,7 +246,12 @@ object MapBasedCodecs extends DerivationApi {
246246 new Deriver [Decoder , T , quotes.type ]:
247247
248248 def deriveForCaseObject (moduleTermSymbol : Symbol ): Expr [Decoder [T ]] =
249- ' { Decoder [T ](r => r.readMapClose(r.readMapOpen(0 ), $ { Ref (moduleTermSymbol).asExprOf[T ] })) }
249+ ' {
250+ Decoder [T ] { r =>
251+ if (r.readMapOpen(0 )) while (! r.tryReadBreak()) r.skipElement()
252+ $ { Ref (moduleTermSymbol).asExprOf[T ] }
253+ }
254+ }
250255
251256 def deriveForCaseClass (
252257 tpe : TypeRepr ,
@@ -443,7 +448,7 @@ object MapBasedCodecs extends DerivationApi {
443448 else fail(" Case classes mit > 128 fields are not supported" )
444449 } else
445450 ' {
446- if (count < 0 ) $r.readBreak ()
451+ if (count < 0 ) while ( ! $r.tryReadBreak()) $r.skipElement ()
447452 $ { companionApply(companion, typeArgs(tpe), Nil ).asExprOf[T ] }
448453 }
449454 }
Original file line number Diff line number Diff line change @@ -162,4 +162,17 @@ class MiscSpec extends AbstractBorerSpec {
162162 | 1| }
163163 |""" .stripMargin
164164 }
165+
166+ test(" Extra members" ) {
167+ sealed trait Base
168+ case class A (x : Int ) extends Base
169+ case class B () extends Base
170+ case object C extends Base
171+
172+ implicit val baseCodecs : Decoder [Base ] = MapBasedCodecs .deriveAllDecoders
173+
174+ verifyDecoding[Base ](""" {"A":{"x":100, "extra": "should be ignored"}}""" , A (100 ))
175+ verifyDecoding[Base ](""" {"B":{"extra": "should be ignored"}}""" , B ())
176+ verifyDecoding[Base ](""" {"C":{"extra": "should be ignored"}}""" , C )
177+ }
165178}
You can’t perform that action at this time.
0 commit comments