
octopus.AsyncValidator.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of octopus_sjs0.6_2.13 Show documentation
Show all versions of octopus_sjs0.6_2.13 Show documentation
Boilerplate-free validation library for Scala
The newest version!
package octopus
import scala.concurrent.Future
private[octopus] object AsyncValidator extends Serializable {
def apply[T](implicit appError: AppError[Future]): octopus.dsl.AsyncValidator[T] =
AsyncValidatorM.lift[Future, T](Validator.apply[T])
}
trait AsyncValidatorM[M[_], T] {
def validate(obj: T)(implicit appError: AppError[M]): M[List[ValidationError]]
}
object AsyncValidatorM extends LowPriorityAsyncValidatorM {
def instance[M[_], T](f: T => M[List[ValidationError]]): AsyncValidatorM[M, T] = {
new AsyncValidatorM[M, T] {
def validate(obj: T)(implicit appError: AppError[M]): M[List[ValidationError]] =
f(obj)
}
}
def lift[M[_]: AppError, T](v: Validator[T]): AsyncValidatorM[M, T] =
instance { obj =>
AppError[M].pure(v.validate(obj))
}
def apply[M[_]: AppError, T]: AsyncValidatorM[M, T] =
lift(Validator.apply[T])
def invalid[M[_]: AppError, T](error: String): AsyncValidatorM[M, T] =
lift(Validator.invalid(error))
implicit def fromDerived[M[_], T](implicit dav: DerivedAsyncValidator[M, T]): AsyncValidatorM[M, T] = dav.av
}
sealed abstract class LowPriorityAsyncValidatorM extends Serializable {
implicit def fromSyncValidator[M[_]: AppError, T](implicit v: Validator[T]): AsyncValidatorM[M, T] =
AsyncValidatorM.lift(v)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy