diff options
Diffstat (limited to 'cask/src/cask/router')
-rw-r--r-- | cask/src/cask/router/Result.scala | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/cask/src/cask/router/Result.scala b/cask/src/cask/router/Result.scala index 52ef0f8..e38ee28 100644 --- a/cask/src/cask/router/Result.scala +++ b/cask/src/cask/router/Result.scala @@ -9,6 +9,7 @@ package cask.router */ sealed trait Result[+T]{ def map[V](f: T => V): Result[V] + def transform[V](f: PartialFunction[T, V]): Result[V] } object Result{ @@ -18,6 +19,10 @@ object Result{ */ case class Success[T](value: T) extends Result[T]{ def map[V](f: T => V) = Success(f(value)) + def transform[V](f: PartialFunction[T, V]) = f.lift(value) match { + case None => Success(value).asInstanceOf[Result[V]] + case Some(res) => Success(res) + } } /** @@ -25,6 +30,7 @@ object Result{ */ sealed trait Error extends Result[Nothing]{ def map[V](f: Nothing => V) = this + def transform[V](f: PartialFunction[Nothing, V]) = this } |