app/aws/AwsAsyncHandler.scala (30 lines of code) (raw):

package aws import com.amazonaws.AmazonWebServiceRequest import com.amazonaws.handlers.AsyncHandler import play.api.Logging import scala.concurrent.{Future, Promise} class AwsAsyncPromiseHandler[R <: AmazonWebServiceRequest, T]( promise: Promise[T] ) extends AsyncHandler[R, T] with Logging { def onError(e: Exception) = { logger.warn("Failed to execute AWS SDK operation", e) promise failure e } def onSuccess(r: R, t: T) = { promise success t } } object AwsAsyncHandler { def awsToScala[R <: AmazonWebServiceRequest, T]( sdkMethod: Function2[ R, AsyncHandler[R, T], java.util.concurrent.Future[T] ] ): Function1[R, Future[T]] = { req => val p = Promise[T] sdkMethod(req, new AwsAsyncPromiseHandler(p)) p.future } }