vivalidi [abandoned]
This project is not actively developed. Use Parallel from cats.
 
A crazy man's effect-agnostic validations for Scala DTOs. Mostly extra syntax for cats' parMapN that's less red-squiggly in IntelliJ IDEA.
Warning: this library is as experimental as they come (it doesn't even have a logo yet). You're highly discouraged from using it in production, although you might want to check it out in side projects or contribute to the upcoming planning for a more stable API.
SBT dependency
"com.kubukoz" %% "vivalidi" % "x.x.x" 
Replace x.x.x with the version you want (the latest non-snapshot release version can be seen on the top of this README). The library is cross-compiled to Scala 2.12 and Scala.js - for the latter, replace %% with %%%.
Usage
Coming soon - until then, please enjoy this example from tests:
import vivalidi.Vivalidi, vivalidi.syntax.all._
type EitherNelT[F[_], E, T] = EitherT[F, NonEmptyList[E], T]
type E[A] = EitherNelT[IO, String, A]
val validation: Person => EitherNelT[IO, String, Person] = Vivalidi[Person, E].init
  .sync(_.id)(_ => "wrong id".leftNel[Long])
  .just(_.name)
  .async(_.age)(_ => "wrong age".leftNel[Int].liftTo[E])
  .to[Person]
  .run
val person = Person(1, "hello", 21)
validation(person).value.unsafeRunSync() 
tl;dr CreateV[_] : Applicative - so far the validators (e.g. validateLength, a custom function taking String and returning CreateV[String]) are responsible for raising errors, but in the future there might be no type parameter for errors, just an appropriate MonadError context bound. F[_] is just an applicative (like Future), and TransactionToCreate is the input type (which toCreate matches).
FAQ
- Can I use this in production?
 
- Does this have any external dependencies?
 
Yes, there's a direct dependency on cats-core and shapeless.
- Tests?
 
lmao
