summaryrefslogtreecommitdiff
path: root/cask/src/cask/router/Result.scala
diff options
context:
space:
mode:
Diffstat (limited to 'cask/src/cask/router/Result.scala')
-rw-r--r--cask/src/cask/router/Result.scala6
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
}