module Network.Api.Postmark.Error where
import Control.Applicative
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
| 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
_ -> 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 (PostmarkUnkownError code) =
"An unexpected error code [" ++ show code ++ "] was retured from postmark."