diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2019-09-16 08:58:31 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2019-09-16 08:58:31 +0800 |
commit | 583893aff7e39e085dbf5bec27c9b0b24e5e8d2e (patch) | |
tree | b2cf94c9bef2824159d8c9bd4f4867163a6ef36c /cask/src/cask/router/Runtime.scala | |
parent | 4851f249c8124ce725576f4f87f097f16e2f3843 (diff) | |
download | cask-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.scala | 39 |
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 |