final
class
FutureOutcome[+S, +F] extends AnyVal
Instance Constructors
-
new
FutureOutcome(resolve: Future[Outcome[S, F]])
Value Members
-
final
def
!=(arg0: Any): Boolean
-
final
def
##(): Int
-
final
def
==(arg0: Any): Boolean
-
final
def
asInstanceOf[T0]: T0
-
def
filter[FF >: F](f: (S) ⇒ Boolean, failure: FF): FutureOutcome[S, FF]
-
-
def
flatten[T, FF >: F](implicit asFutureOutcome: (S) ⇒ FutureOutcome[T, FF]): FutureOutcome[T, FF]
-
def
foreach[T](f: (S) ⇒ Unit): Unit
-
def
getClass(): Class[_ <: AnyVal]
-
final
def
isInstanceOf[T0]: Boolean
-
def
map[T](f: (S) ⇒ T): FutureOutcome[T, F]
-
-
val
resolve: Future[Outcome[S, F]]
-
def
toString(): String
-
def
withFilter[FF >: F](f: (S) ⇒ Boolean, failure: FF): FutureOutcome[S, FF]
Inherited from AnyVal
Inherited from Any
Inspired by io.fsq.common.concurrent.FutureOption, this is a monadic wrapper around Future[Outcome[S, F]] so you can easily combine Future[S], Option[S], Outcome[S, F], etc. into a for yield.
Example:
val result: Future[Outcome[Venue, String]] = (for { userid <- FutureOutcome.lift(msg.useridOption, "no-userid") user <- FutureOutcome.lift(services.futureDb.fetchOne(Q(User).where(_.userid eqs userid)), "no-user") venue <- FutureOutcome(services.foo.bar(user)) // where bar returns Future[Outcome[Venue, String]] _ <- FutureOutcome.failWhen(venue.isHomeOrOffice, "home-or-office-venue") } yield venue).resolve