diff options
Diffstat (limited to 'cask/src/cask/router/Result.scala')
-rw-r--r-- | cask/src/cask/router/Result.scala | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/cask/src/cask/router/Result.scala b/cask/src/cask/router/Result.scala new file mode 100644 index 0000000..52ef0f8 --- /dev/null +++ b/cask/src/cask/router/Result.scala @@ -0,0 +1,66 @@ +package cask.router + + + + +/** + * Represents what comes out of an attempt to invoke an [[EntryPoint]]. + * Could succeed with a value, but could fail in many different ways. + */ +sealed trait Result[+T]{ + def map[V](f: T => V): Result[V] +} +object Result{ + + /** + * Invoking the [[EntryPoint]] was totally successful, and returned a + * result + */ + case class Success[T](value: T) extends Result[T]{ + def map[V](f: T => V) = Success(f(value)) + } + + /** + * Invoking the [[EntryPoint]] was not successful + */ + sealed trait Error extends Result[Nothing]{ + def map[V](f: Nothing => V) = this + } + + + object Error{ + + + /** + * Invoking the [[EntryPoint]] failed with an exception while executing + * code within it. + */ + case class Exception(t: Throwable) extends Error + + /** + * Invoking the [[EntryPoint]] failed because the arguments provided + * did not line up with the arguments expected + */ + case class MismatchedArguments(missing: Seq[ArgSig[_, _, _, _]], + unknown: Seq[String]) extends Error + /** + * Invoking the [[EntryPoint]] failed because there were problems + * deserializing/parsing individual arguments + */ + case class InvalidArguments(values: Seq[ParamError]) extends Error + } + + sealed trait ParamError + object ParamError{ + /** + * Something went wrong trying to de-serialize the input parameter; + * the thrown exception is stored in [[ex]] + */ + case class Invalid(arg: ArgSig[_, _, _, _], value: String, ex: Throwable) extends ParamError + /** + * Something went wrong trying to evaluate the default value + * for this input parameter + */ + case class DefaultFailed(arg: ArgSig[_, _, _, _], ex: Throwable) extends ParamError + } +}
\ No newline at end of file |