override def validateRecord()

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())
    }
  }