packages feed

cabal-cache-1.2.0.0: src/HaskellWorks/CabalCache/AWS/Error.hs

module HaskellWorks.CabalCache.AWS.Error
  ( handleAwsStatusError
  ) where

import Effectful
import Effectful.Zoo.Amazonka.Data.AwsError
import Effectful.Zoo.Core
import Effectful.Zoo.Core.Error.Static
import HaskellWorks.CabalCache.AppError (AwsStatusError(..))
import HaskellWorks.Prelude

import qualified Amazonka                             as AWS
import qualified Network.HTTP.Types                   as HTTP

{- HLINT ignore "Redundant do"        -}
{- HLINT ignore "Reduce duplication"  -}
{- HLINT ignore "Redundant bracket"   -}

handleAwsStatusError :: ()
  => r <: Error AwsError
  => r <: Error AwsStatusError
  => Eff r a
  -> Eff r a
handleAwsStatusError f = f & trapIn @AwsError \case
    (AWS.ServiceError (AWS.ServiceError' _ s@(HTTP.Status _ _) _ _ _ _)) -> throw $ AwsStatusError s
    e                                                                    -> throw e