def split[T]()

in elitzur-core/src/main/scala/com/spotify/elitzur/validators/Validator.scala [287:318]


  def split[T](sealedTrait: SealedTrait[Validator, T]): Validator[T] =
    new Validator[T] {
      def validateRecord(
          a: PreValidation[T],
          path: String = "",
          outermostClassName: Option[String] = None,
          config: ValidationRecordConfig = DefaultRecordConfig
      ): PostValidation[T] = {
        sealedTrait.subtypes
          .flatMap { x =>
            // TODO: Same circular dereference/construction here
            val y =
              Try(
                x.typeclass.validateRecord(
                  Unvalidated(x.cast(a.forceGet)),
                  path,
                  outermostClassName,
                  config
                )
              ).toOption
            y
          }
          .headOption
          .getOrElse(
            throw new Exception(
              s"Couldn't find validator for any subtype of ${sealedTrait.typeName.full}"
            )
          )
      }

      override def shouldValidate: Boolean = true
    }