All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.identityblitz.json.JResult.scala Maven / Gradle / Ivy

The newest version!
package com.identityblitz.json

import java.util.NoSuchElementException

/**
 *
 */

sealed trait JResult[+T] {

  def fold[B](ef: Seq[String] => B)(sf: T => B): B = this match {
    case JSuccess(s) => sf(s)
    case JError(e) => ef(e)
  }

  def get: T

  def getOpt: Option[T] = this match {
    case JSuccess(s) => Option(s)
    case _ => None
  }

  def map[B](f: T => B): JResult[B] = this match {
    case JSuccess(v) => JSuccess(f(v))
    case j: JError => j
  }

  def and[Z >: T, B, R](s: JResult[B])(implicit bld: (JSuccess[Z], JSuccess[B]) => JSuccess[R]) = this match {
    case j: JSuccess[Z] => j ++ s
    case j: JError => j ++ s
  }

  def $[R <: Applicative](implicit v: JResult[T] => R) = v(this)

}

trait Applicative

case class Applicative1[A1](t: JResult[A1]) extends Applicative { def lift[T](f: A1 => T): JResult[T] = t map f }
case class Applicative2[A1, A2](t: JResult[(A1, A2)]) extends Applicative { def lift[T](f: (A1, A2) => T): JResult[T] = t map f.tupled }
case class Applicative3[A1, A2, A3](t: JResult[(A1, A2, A3)]) extends Applicative { def lift[T](f: (A1, A2, A3) => T): JResult[T] = t map f.tupled }
case class Applicative4[A1, A2, A3, A4](t: JResult[(A1, A2, A3, A4)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4) => T): JResult[T] = t map f.tupled }
case class Applicative5[A1, A2, A3, A4, A5](t: JResult[(A1, A2, A3, A4, A5)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5) => T): JResult[T] = t map f.tupled }
case class Applicative6[A1, A2, A3, A4, A5, A6](t: JResult[(A1, A2, A3, A4, A5, A6)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6) => T): JResult[T] = t map f.tupled }
case class Applicative7[A1, A2, A3, A4, A5, A6, A7](t: JResult[(A1, A2, A3, A4, A5, A6, A7)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7) => T): JResult[T] = t map f.tupled }
case class Applicative8[A1, A2, A3, A4, A5, A6, A7, A8](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8) => T): JResult[T] = t map f.tupled }
case class Applicative9[A1, A2, A3, A4, A5, A6, A7, A8, A9](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9) => T): JResult[T] = t map f.tupled }
case class Applicative10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) => T): JResult[T] = t map f.tupled }
case class Applicative11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) => T): JResult[T] = t map f.tupled }
case class Applicative12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) => T): JResult[T] = t map f.tupled }
case class Applicative13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => T): JResult[T] = t map f.tupled }
case class Applicative14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => T): JResult[T] = t map f.tupled }
case class Applicative15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => T): JResult[T] = t map f.tupled }
case class Applicative16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => T): JResult[T] = t map f.tupled }
case class Applicative17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => T): JResult[T] = t map f.tupled }
case class Applicative18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => T): JResult[T] = t map f.tupled }
case class Applicative19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => T): JResult[T] = t map f.tupled }
case class Applicative20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => T): JResult[T] = t map f.tupled }
case class Applicative21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => T): JResult[T] = t map f.tupled }
case class Applicative22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22)]) extends Applicative { def lift[T](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22) => T): JResult[T] = t map f.tupled }

import scala.language.implicitConversions

object JsonTools {

  implicit def jBuilder2[A1, A2](a1: JSuccess[A1], a2: JSuccess[A2]) = (a1, a2) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1, v2)) }
  implicit def jBuilder3[A1, A2, A3](a: JSuccess[(A1, A2)], b: JSuccess[A3]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v2)) }
  implicit def jBuilder4[A1, A2, A3, A4](a: JSuccess[(A1, A2, A3)], b: JSuccess[A4]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v2)) }
  implicit def jBuilder5[A1, A2, A3, A4, A5](a: JSuccess[(A1, A2, A3, A4)], b: JSuccess[A5]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v2)) }
  implicit def jBuilder6[A1, A2, A3, A4, A5, A6](a: JSuccess[(A1, A2, A3, A4, A5)], b: JSuccess[A6]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v2)) }
  implicit def jBuilder7[A1, A2, A3, A4, A5, A6, A7](a: JSuccess[(A1, A2, A3, A4, A5, A6)], b: JSuccess[A7]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v2)) }
  implicit def jBuilder8[A1, A2, A3, A4, A5, A6, A7, A8](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7)], b: JSuccess[A8]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v2)) }
  implicit def jBuilder9[A1, A2, A3, A4, A5, A6, A7, A8, A9](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8)], b: JSuccess[A9]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v2)) }
  implicit def jBuilder10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9)], b: JSuccess[A10]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v2)) }
  implicit def jBuilder11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)], b: JSuccess[A11]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v2)) }
  implicit def jBuilder12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)], b: JSuccess[A12]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v2)) }
  implicit def jBuilder13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)], b: JSuccess[A13]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v2)) }
  implicit def jBuilder14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)], b: JSuccess[A14]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v2)) }
  implicit def jBuilder15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)], b: JSuccess[A15]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v2)) }
  implicit def jBuilder16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)], b: JSuccess[A16]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v2)) }
  implicit def jBuilder17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16)], b: JSuccess[A17]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v2)) }
  implicit def jBuilder18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17)], b: JSuccess[A18]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v1._17, v2)) }
  implicit def jBuilder19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18)], b: JSuccess[A19]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v1._17, v1._18, v2)) }
  implicit def jBuilder20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19)], b: JSuccess[A20]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v1._17, v1._18, v1._19, v2)) }
  implicit def jBuilder21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)], b: JSuccess[A21]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v1._17, v1._18, v1._19, v1._20, v2)) }
  implicit def jBuilder22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](a: JSuccess[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21)], b: JSuccess[A22]) = (a, b) match { case (JSuccess(v1), JSuccess(v2)) => JSuccess((v1._1, v1._2, v1._3, v1._4, v1._5, v1._6, v1._7, v1._8, v1._9, v1._10, v1._11, v1._12, v1._13, v1._14, v1._15, v1._16, v1._17, v1._18, v1._19, v1._20, v1._21, v2)) }

  implicit def applicative1[A1](t: JResult[A1]) = Applicative1(t)
  implicit def applicative2[A1, A2](t: JResult[(A1, A2)]) = Applicative2(t)
  implicit def applicative3[A1, A2, A3](t: JResult[(A1, A2, A3)]) = Applicative3(t)
  implicit def applicative4[A1, A2, A3, A4](t: JResult[(A1, A2, A3, A4)]) = Applicative4(t)
  implicit def applicative5[A1, A2, A3, A4, A5](t: JResult[(A1, A2, A3, A4, A5)]) = Applicative5(t)
  implicit def applicative6[A1, A2, A3, A4, A5, A6](t: JResult[(A1, A2, A3, A4, A5, A6)]) = Applicative6(t)
  implicit def applicative7[A1, A2, A3, A4, A5, A6, A7](t: JResult[(A1, A2, A3, A4, A5, A6, A7)]) = Applicative7(t)
  implicit def applicative8[A1, A2, A3, A4, A5, A6, A7, A8](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8)]) = Applicative8(t)
  implicit def applicative9[A1, A2, A3, A4, A5, A6, A7, A8, A9](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9)]) = Applicative9(t)
  implicit def applicative10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)]) = Applicative10(t)
  implicit def applicative11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)]) = Applicative11(t)
  implicit def applicative12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)]) = Applicative12(t)
  implicit def applicative13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)]) = Applicative13(t)
  implicit def applicative14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)]) = Applicative14(t)
  implicit def applicative15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)]) = Applicative15(t)
  implicit def applicative16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16)]) = Applicative16(t)
  implicit def applicative17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17)]) = Applicative17(t)
  implicit def applicative18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18)]) = Applicative18(t)
  implicit def applicative19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19)]) = Applicative19(t)
  implicit def applicative20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)]) = Applicative20(t)
  implicit def applicative21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21)]) = Applicative21(t)
  implicit def applicative22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](t: JResult[(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22)]) = Applicative22(t)

}

case class JSuccess[V](value: V) extends JResult[V] {

  def get: V = value

  override def toString: String = "JSuccess(" + value + ")"

  def ++[B, R](s: JResult[B])(implicit bld: (JSuccess[V], JSuccess[B]) => JSuccess[R]) = s match {
    case v: JSuccess[B] => bld.apply(this, v)
    case e: JError => e
  }

}

case class JError(errors: Seq[String]) extends JResult[Nothing] {

  def get = throw new NoSuchElementException("JError.get")

  override def toString: String = "JError(" + errors + ")"

  def ++[B, R](s: JResult[B]) = s match {
    case JSuccess(_) => this
    case JError(e) => JError(errors ++ e)
  }

}

object JError {

  def apply(error: String) = new JError(Seq(error))

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy