module Aws.S3.Error
where
import Aws.Metadata
import Aws.S3.Metadata
import Control.Monad.Error.Class
import Data.Typeable
import Text.XML.Monad
import qualified Control.Exception as C
import qualified Data.ByteString as B
import qualified Network.HTTP.Types as HTTP
type ErrorCode = String
data S3Error
= S3Error {
s3StatusCode :: HTTP.Status
, s3ErrorCode :: ErrorCode
, s3ErrorMessage :: String
, s3ErrorResource :: Maybe String
, s3ErrorHostId :: Maybe String
, s3ErrorAccessKeyId :: Maybe String
, s3ErrorStringToSign :: Maybe B.ByteString
, s3ErrorMetadata :: Maybe S3Metadata
}
| S3XmlError {
fromS3XmlError :: XmlError
, s3XmlErrorMetadata :: Maybe S3Metadata
}
deriving (Show, Typeable)
instance C.Exception S3Error
instance FromXmlError S3Error where
fromXmlError = flip S3XmlError Nothing
instance Error S3Error where
noMsg = fromXmlError noMsg
strMsg = fromXmlError . strMsg
instance WithMetadata S3Error S3Metadata where
getMetadata S3Error { s3ErrorMetadata = m } = m
getMetadata S3XmlError { s3XmlErrorMetadata = m } = m
setMetadata m a@S3Error{} = a { s3ErrorMetadata = Just m }
setMetadata m a@S3XmlError{} = a { s3XmlErrorMetadata = Just m }