module Mail.Hailgun.Errors
( HailgunErrorResponse(..)
, toHailgunError
, serverError
, unexpectedError
, gatherErrors
, mapError
) where
import Control.Applicative
import Control.Monad (mzero)
import Data.Aeson
import qualified Data.Text as T
data HailgunErrorResponse = HailgunErrorResponse
{ herMessage :: String
}
deriving (Show)
toHailgunError :: String -> HailgunErrorResponse
toHailgunError = HailgunErrorResponse
instance FromJSON HailgunErrorResponse where
parseJSON (Object v) = HailgunErrorResponse
<$> v .: T.pack "message"
parseJSON _ = mzero
serverError :: Either HailgunErrorResponse a
serverError = retError "Server Errors - something is wrong on Mailgun’s end"
unexpectedError :: Int -> Either HailgunErrorResponse a
unexpectedError x = retError $ "Unexpected Non-Standard Mailgun Error: " ++ show x
retError :: String -> Either HailgunErrorResponse a
retError = Left . toHailgunError
mapError :: Either String a -> Either HailgunErrorResponse a
mapError = either retError Right
gatherErrors :: Either HailgunErrorResponse HailgunErrorResponse -> Either HailgunErrorResponse a
gatherErrors = either Left Left