{-# LANGUAGE DeriveDataTypeable, MultiParamTypeClasses #-}
module Aws.Sqs.Error where

import           Aws.Sqs.Metadata
import           Data.Typeable
import qualified Control.Exception  as C
import qualified Data.Text          as T
import qualified Network.HTTP.Types as HTTP

type ErrorCode = T.Text

data SqsError
    = SqsError {
        sqsStatusCode :: HTTP.Status
      , sqsErrorCode :: ErrorCode
      , sqsErrorType :: T.Text
      , sqsErrorMessage :: T.Text
      , sqsErrorDetail :: Maybe T.Text
      , sqsErrorMetadata :: Maybe SqsMetadata
      }
    | SqsXmlError { 
        sqsXmlErrorMessage :: T.Text
      , sqsXmlErrorMetadata :: Maybe SqsMetadata
      }
    deriving (Show, Typeable)

instance C.Exception SqsError