summaryrefslogtreecommitdiff
path: root/cask/src/cask/router/Runtime.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2019-09-16 08:58:31 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2019-09-16 08:58:31 +0800
commit583893aff7e39e085dbf5bec27c9b0b24e5e8d2e (patch)
treeb2cf94c9bef2824159d8c9bd4f4867163a6ef36c /cask/src/cask/router/Runtime.scala
parent4851f249c8124ce725576f4f87f097f16e2f3843 (diff)
downloadcask-583893aff7e39e085dbf5bec27c9b0b24e5e8d2e.tar.gz
cask-583893aff7e39e085dbf5bec27c9b0b24e5e8d2e.tar.bz2
cask-583893aff7e39e085dbf5bec27c9b0b24e5e8d2e.zip
Break up `Router.scala` into a `router/` folder with multiple files
Diffstat (limited to 'cask/src/cask/router/Runtime.scala')
-rw-r--r--cask/src/cask/router/Runtime.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/cask/src/cask/router/Runtime.scala b/cask/src/cask/router/Runtime.scala
new file mode 100644
index 0000000..4fbbb48
--- /dev/null
+++ b/cask/src/cask/router/Runtime.scala
@@ -0,0 +1,39 @@
+package cask.router
+
+object Runtime{
+
+ def tryEither[T](t: => T, error: Throwable => Result.ParamError) = {
+ try Right(t)
+ catch{ case e: Throwable => Left(error(e))}
+ }
+
+
+ def validate(args: Seq[Either[Seq[Result.ParamError], Any]]): Result[Seq[Any]] = {
+ val lefts = args.collect{case Left(x) => x}.flatten
+
+ if (lefts.nonEmpty) Result.Error.InvalidArguments(lefts)
+ else {
+ val rights = args.collect{case Right(x) => x}
+ Result.Success(rights)
+ }
+ }
+
+ def makeReadCall[I, C](dict: Map[String, I],
+ ctx: C,
+ default: => Option[Any],
+ arg: ArgSig[I, _, _, C]) = {
+ arg.reads.arity match{
+ case 0 =>
+ tryEither(
+ arg.reads.read(ctx, arg.name, null.asInstanceOf[I]), Result.ParamError.DefaultFailed(arg, _)).left.map(Seq(_))
+ case 1 =>
+ dict.get(arg.name) match{
+ case None =>
+ tryEither(default.get, Result.ParamError.DefaultFailed(arg, _)).left.map(Seq(_))
+
+ case Some(x) =>
+ tryEither(arg.reads.read(ctx, arg.name, x), Result.ParamError.Invalid(arg, x.toString, _)).left.map(Seq(_))
+ }
+ }
+ }
+} \ No newline at end of file