diff options
Diffstat (limited to 'core/src/main/scala/com/softwaremill/sttp/TryBackend.scala')
-rw-r--r-- | core/src/main/scala/com/softwaremill/sttp/TryBackend.scala | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/core/src/main/scala/com/softwaremill/sttp/TryBackend.scala b/core/src/main/scala/com/softwaremill/sttp/TryBackend.scala new file mode 100644 index 0000000..267259c --- /dev/null +++ b/core/src/main/scala/com/softwaremill/sttp/TryBackend.scala @@ -0,0 +1,29 @@ +package com.softwaremill.sttp + +import java.net.HttpURLConnection + +import scala.util.Try + +/** A Backend that safely wraps SttpBackend exceptions in Try's + * + * @param delegate An SttpBackend which to which this backend forwards all requests + * @tparam S The type of streams that are supported by the backend. `Nothing`, + * if streaming requests/responses is not supported by this backend. + */ +class TryBackend[-S](delegate: SttpBackend[Id, S]) extends SttpBackend[Try, S] { + override def send[T](request: Request[T, S]): Try[Response[T]] = + Try(delegate.send(request)) + + override def close(): Unit = delegate.close() + + override def responseMonad: MonadError[Try] = TryMonad +} + +object TryBackend { + def apply(options: SttpBackendOptions = SttpBackendOptions.Default, + customizeConnection: HttpURLConnection => Unit = { _ => + () + }): SttpBackend[Try, Nothing] = + new TryBackend[Nothing]( + HttpURLConnectionBackend(options, customizeConnection)) +} |