Skip to content

Commit 473e4e4

Browse files
committed
More efficient default value evaluator
1 parent 8beac64 commit 473e4e4

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

core/src/main/scala/magnolia1/impl.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,18 @@ object CaseClassDerivation:
111111
val label = constValue[l].asInstanceOf[String]
112112
val tc = new SerializableFunction0[Typeclass[p]]:
113113
override def apply(): Typeclass[p] = summonInline[Typeclass[p]]
114-
115-
val d = new SerializableFunction0[Option[p]]:
116-
private def unsafeCast(any: Any) = Option.when(any == null || (any: @unchecked).isInstanceOf[p])(any.asInstanceOf[p])
117-
override def apply(): Option[p] = defaults.get(label).flatten.flatMap(d => unsafeCast(d.apply))
114+
val evaluator: () => Any = defaults(label).orNull
115+
val d =
116+
if (evaluator ne null) {
117+
new SerializableFunction0[Option[p]]:
118+
override def apply(): Option[p] =
119+
val v = evaluator()
120+
if (v.isInstanceOf[p]) Some(v.asInstanceOf[p])
121+
else None
122+
} else {
123+
new SerializableFunction0[Option[p]]:
124+
override def apply(): Option[p] = None
125+
}
118126
paramFromMaps[Typeclass, A, p](
119127
label,
120128
CallByNeed.createLazy(tc),

0 commit comments

Comments
 (0)