Skip to content

Commit 6a72146

Browse files
author
Bartłomiej Wiśniewski
committed
do not validate multiple times
1 parent 3e3363c commit 6a72146

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

commons-core/src/main/scala/com/avsystem/commons/serialization/cbor/CborAdtMetadata.scala

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -256,21 +256,23 @@ trait CborAdtInstances[T] {
256256
}
257257

258258
trait CborAdtPolyInstances[C[_]] {
259-
private val alreadyValidated = AtomicBoolean(false)
260259
def stdCodec[T: GenCodec]: GenObjectCodec[C[T]]
261260
def metadata[T: GenCodec]: CborAdtMetadata[C[T]]
262-
def cborCodec[T: GenCodec]: GenObjectCodec[C[T]] =
261+
def cborCodec[T: GenCodec](validate: Boolean): GenObjectCodec[C[T]] =
263262
metadata.setup { metadata =>
264-
if (!alreadyValidated.get()) {
265-
metadata.validate()
266-
alreadyValidated.set(true)
267-
}
263+
if (validate) metadata.validate()
268264
}.adjustCodec(stdCodec)
269265
}
270266

271267
/**
272268
* Like [[HasCborCodec]] but for parameterized (generic) data types.
273269
*/
274270
abstract class HasPolyCborCodec[C[_]](implicit instances: MacroInstances[CborOptimizedCodecs, CborAdtPolyInstances[C]]) {
275-
implicit def codec[T: GenCodec]: GenObjectCodec[C[T]] = instances(CborOptimizedCodecs, this).cborCodec
271+
private val alreadyValidated = AtomicBoolean(false)
272+
273+
implicit def codec[T: GenCodec]: GenObjectCodec[C[T]] = {
274+
val codec = instances(CborOptimizedCodecs, this).cborCodec(!alreadyValidated.get())
275+
if (!alreadyValidated.get()) alreadyValidated.set(true)
276+
codec
277+
}
276278
}

0 commit comments

Comments
 (0)