CycloneTechnology/ChaMP

View on GitHub
champ-wsman/src/main/scala/com/cyclone/wsman/impl/http/package.scala

Summary

Maintainability
A
0 mins
Test Coverage
package com.cyclone.wsman.impl

import java.util.concurrent.Executor

import com.ning.http.client.ListenableFuture

import scala.concurrent.{ExecutionContext, Future, Promise}
import scala.language.implicitConversions
import scala.util.control.NonFatal

package object http {
  implicit def toJavaExecutor(execContext: ExecutionContext): Executor =
    (runnable: Runnable) => execContext.execute(runnable)

  implicit def ningFutureToFuture[T](
    ningFuture: ListenableFuture[T]
  )(implicit executionContext: ExecutionContext): Future[T] = {
    val p = Promise[T]

    ningFuture.addListener(() => {
      try {
        p.trySuccess(ningFuture.get)
      } catch {
        case NonFatal(e) => p.tryFailure(e)
      }
    }, executionContext)

    p.future
  }

}