cabal-cache-1.0.6.0: src/HaskellWorks/CabalCache/AWS/Error.hs
{-# LANGUAGE ScopedTypeVariables #-}
module HaskellWorks.CabalCache.AWS.Error
( handleAwsError
) where
import Control.Monad.Catch (MonadCatch(..), MonadThrow(throwM))
import Control.Monad.Except (MonadError)
import HaskellWorks.CabalCache.AppError (AwsError(..))
import qualified Control.Monad.Oops as OO
import qualified Network.AWS as AWS
import qualified Network.HTTP.Types as HTTP
{- HLINT ignore "Redundant do" -}
{- HLINT ignore "Reduce duplication" -}
{- HLINT ignore "Redundant bracket" -}
handleAwsError :: (MonadCatch m,
MonadError (OO.Variant e) m,
OO.CouldBeF e AwsError) =>
m a -> m a
handleAwsError f = catch f $ \(e :: AWS.Error) ->
case e of
(AWS.ServiceError (AWS.ServiceError' _ s@(HTTP.Status _ _) _ _ _ _)) -> OO.throw $ AwsError s
_ -> throwM e