packages feed

cabal-cache-1.2.0.0: src/HaskellWorks/CabalCache/AppError.hs

module HaskellWorks.CabalCache.AppError
  ( AwsStatusError(..),
    HttpError(..),
    HasStatusCode(..),
    HasMaybeStatusCode(..),
    displayAwsStatusError,
    displayHttpError,
  ) where

import HaskellWorks.Prelude

import qualified Network.HTTP.Client as HTTP
import qualified Network.HTTP.Types as HTTP

newtype AwsStatusError = AwsStatusError
  { status :: HTTP.Status
  }
  deriving (Eq, Show, Generic)

data HttpError = HttpError
  { reasponse :: HTTP.Request
  , content    :: HTTP.HttpExceptionContent
  }
  deriving (Show, Generic)

displayAwsStatusError :: AwsStatusError -> Text
displayAwsStatusError (AwsStatusError s) = tshow s

displayHttpError :: HttpError -> Text
displayHttpError (HttpError _ s) = tshow s

class HasStatusCode a where
  statusCodeOf :: a -> Int

class HasMaybeStatusCode a where
  maybeStatusCodeOf :: a -> Maybe Int

instance HasStatusCode AwsStatusError where
  statusCodeOf (AwsStatusError (HTTP.Status c _)) = c

instance HasMaybeStatusCode AwsStatusError where
  maybeStatusCodeOf (AwsStatusError (HTTP.Status c _)) = Just c

instance HasMaybeStatusCode HttpError where
  maybeStatusCodeOf (HttpError _ content') = case content' of
    HTTP.StatusCodeException response _ -> let HTTP.Status c _ = HTTP.responseStatus response in Just c
    _ -> Nothing