{-# LANGUAGE OverloadedStrings, GADTSyntax #-}
module Network.Api.Postmark.Error (
PostmarkError (..),
PostmarkErrorType (..)
) where
import Data.Aeson
import Data.Text
data PostmarkError =
PostmarkError {
errorType :: PostmarkErrorType
, errorMessage :: Text
} deriving (Eq, Show)
data PostmarkErrorType =
PostmarkBadApiToken
| PostmarkInvalidEmail
| PostmarkSenderNotFound
| PostmarkSenderNotConfirmed
| PostmarkInvalidJson
| PostmarkIncompatibleJson
| PostmarkNotAllowed
| PostmarkInactive
| PostmarkBounceNotFound
| PostmarkBounceQueryException
| PostmarkJsonRequired
| PostmarkTooManyMessages
| PostmarkTemplateQueryException
| PostmarkTemplateNotFound
| PostmarkTemplateLimitWouldBeExceeded
| PostmarkTemplateNoDataReceived
| PostmarkTemplateRequiredFieldMissing
| PostmarkTemplateFieldTooLarge
| PostmarkTemplateFieldInvalid
| PostmarkUnkownError Int
deriving Eq
instance FromJSON PostmarkError where
parseJSON (Object o) = PostmarkError
<$> (fmap (\code -> case code of
0 -> PostmarkBadApiToken
300 -> PostmarkInvalidEmail
400 -> PostmarkSenderNotFound
401 -> PostmarkSenderNotConfirmed
402 -> PostmarkInvalidJson
403 -> PostmarkIncompatibleJson
405 -> PostmarkNotAllowed
406 -> PostmarkInactive
407 -> PostmarkBounceNotFound
408 -> PostmarkBounceQueryException
409 -> PostmarkJsonRequired
410 -> PostmarkTooManyMessages
1100 -> PostmarkTemplateQueryException
1101 -> PostmarkTemplateNotFound
1105 -> PostmarkTemplateLimitWouldBeExceeded
1109 -> PostmarkTemplateNoDataReceived
1120 -> PostmarkTemplateRequiredFieldMissing
1121 -> PostmarkTemplateFieldTooLarge
1122 -> PostmarkTemplateFieldInvalid
_ -> PostmarkUnkownError code) (o .: "ErrorCode"))
<*> (o .: "Message")
parseJSON _ = fail "Invalid Postmark Error Response"
instance Show PostmarkErrorType where
show PostmarkBadApiToken =
"Your request did not submit the correct API token in the X-Postmark-Server-Token header."
show PostmarkInvalidEmail =
"Validation failed for the email request JSON data that you provided."
show PostmarkSenderNotFound =
"You are trying to send email with a From address that does not have a sender signature."
show PostmarkSenderNotConfirmed =
"You are trying to send email with a From address that does not have a corresponding confirmed sender signature."
show PostmarkInvalidJson =
"The JSON input you provided is syntactically incorrect."
show PostmarkIncompatibleJson =
"The JSON input you provided is syntactically correct, but still not the one we expect."
show PostmarkNotAllowed =
"You ran out of credits."
show PostmarkInactive =
"You tried to send to a recipient that has been marked as inactive. Inactive recipients are ones that have generated a hard bounce or a spam complaint."
show PostmarkBounceNotFound =
"You requested a bounce by ID, but we could not find an entry in our database."
show PostmarkBounceQueryException =
"You provided bad arguments as a bounces filter."
show PostmarkJsonRequired =
"Your HTTP request does not have the Accept and Content-Type headers set to application/json."
show PostmarkTooManyMessages =
"Your batched request contains more than 500 messages."
show PostmarkTemplateQueryException =
"The value of a GET parameter for the request is not valid."
show PostmarkTemplateNotFound =
"TemplateId not found. The TemplateId references a Template that does not exist, or is not associated with the Server specified for this request."
show PostmarkTemplateLimitWouldBeExceeded =
"Template limit would be exceeded. A Server may have up to 300 active templates, processing this request would exceed this limit."
show PostmarkTemplateNoDataReceived =
"No Template data received. You didn’t provide JSON body parameters in your request. Refer to the Template API reference for more details on required parameters."
show PostmarkTemplateRequiredFieldMissing =
"A required Template field is missing. A required field is missing from the body of the POST request."
show PostmarkTemplateFieldTooLarge =
"Template field is too large. One of the values of the request's body exceeds our size restrictions for that field."
show PostmarkTemplateFieldInvalid =
"A Templated field has been submitted that is invalid. One of the fields of the request body is invalid."
show (PostmarkUnkownError code) =
"An unexpected error code [" ++ show code ++ "] was retured from postmark."