in elitzur-core/src/main/scala/com/spotify/elitzur/validators/Validator.scala [188:229]
override def validateRecord(
a: PreValidation[C[T]],
path: String,
outermostClassName: Option[String],
config: ValidationRecordConfig
): PostValidation[C[T]] = {
// Use mutable state for perf
var atLeastOneInvalid = false
val v = implicitly[Validator[T]]
val builder = builderFn()
val fullPath =
if (v.isInstanceOf[FieldValidator[_]]) {
path
} else {
new JStringBuilder(path.length + 1).append(path).append(".").toString
}
toSeq(a.forceGet).iterator.foreach(ele => {
val res = if (v.isInstanceOf[FieldValidator[_]]) {
val c = config.fieldConfig(fullPath)
validateField(
v.asInstanceOf[FieldValidator[T]],
Unvalidated(ele),
c,
outermostClassName.get,
fullPath
)
} else {
v.validateRecord(Unvalidated(ele), fullPath, outermostClassName, config)
}
if (!atLeastOneInvalid && res.isInvalid) {
atLeastOneInvalid = true
}
builder += res.forceGet
})
if (atLeastOneInvalid) {
Invalid(builder.result())
} else {
Valid(builder.result())
}
}