package util object FutureOption { implicit class WithFutureOption[A](self: Future[Option[A]]) { def flatMapOption[T](e: => Exception)(f: A => Future[T]): Future[T] = { self flatMap { _ map f getOrElse Future.failed(e) } } def mapOption[T](e: => Exception)(f: A => T): Future[T] = { self map { _ map f getOrElse (throw e) } } } }