aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/execution.scala
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2017-04-03 11:54:55 -0700
committerStewart Stewart <stewinsalot@gmail.com>2017-04-03 11:54:55 -0700
commit18b978b49649faf15ccb7c3a1f28c61d68bae20a (patch)
treea5058ccd44e673f9f4cb999bcc012b45cc3f88ce /src/main/scala/xyz/driver/core/execution.scala
parent5831ed23235daccc773362bfb5bb5dda70f7dc1b (diff)
parent0ed008ab290074eae0f11fa0149a736e8abd7064 (diff)
downloaddriver-core-18b978b49649faf15ccb7c3a1f28c61d68bae20a.tar.gz
driver-core-18b978b49649faf15ccb7c3a1f28c61d68bae20a.tar.bz2
driver-core-18b978b49649faf15ccb7c3a1f28c61d68bae20a.zip
Merge branch 'master' of github.com:drivergroup/driver-core
Diffstat (limited to 'src/main/scala/xyz/driver/core/execution.scala')
-rw-r--r--src/main/scala/xyz/driver/core/execution.scala45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/execution.scala b/src/main/scala/xyz/driver/core/execution.scala
new file mode 100644
index 0000000..0cf92fd
--- /dev/null
+++ b/src/main/scala/xyz/driver/core/execution.scala
@@ -0,0 +1,45 @@
+package xyz.driver.core
+
+import scala.concurrent.{ExecutionContext, Future}
+import scalaz.OptionT
+
+object execution {
+
+ implicit class FutureOptionTExtensions[T](future: Future[T])(implicit executionContext: ExecutionContext) {
+
+ def toOptionT: OptionT[Future, T] =
+ OptionT.optionT[Future](future.map(value => Option(value)))
+
+ def returnUnit: Future[Unit] =
+ future.map(_ => Option(()))
+
+ def returnUnitOpt: OptionT[Future, Unit] =
+ OptionT.optionT[Future](future.map(_ => Option(())))
+
+ def andEffect[E](effect: Future[E]): Future[T] =
+ for {
+ result <- future
+ _ <- effect
+ } yield result
+
+ def andEffect[E](effect: OptionT[Future, E]): Future[T] =
+ andEffect(effect.run)
+ }
+
+ def illegalState[T](message: String): OptionT[Future, T] =
+ failure[T](new IllegalStateException(message))
+
+ def illegalArgument[T](message: String): OptionT[Future, T] =
+ failure[T](new IllegalArgumentException(message))
+
+ def failure[T](throwable: Throwable): OptionT[Future, T] =
+ OptionT.optionT(Future.failed[Option[T]](throwable))
+
+ def collectOrNone[T, R](value: T)(f: PartialFunction[T, OptionT[Future, R]]): OptionT[Future, R] =
+ f.lift(value).getOrElse(OptionT.optionT(Future.successful(Option.empty[R])))
+
+ def collectOrDoNothing[T](value: T)(f: PartialFunction[T, OptionT[Future, Unit]]): OptionT[Future, Unit] =
+ f.lift(value).getOrElse(doNothing)
+
+ val doNothing = OptionT.optionT(Future.successful(Option(())))
+}