{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Pinboard.Error
( defaultPinboardError
, PinboardErrorHTTPCode(..)
, PinboardErrorType(..)
, PinboardErrorCode(..)
, PinboardError(..)
) where
import Data.Text (Text)
import Data.Monoid
import Prelude
import UnliftIO
data PinboardErrorHTTPCode
= BadRequest
| UnAuthorized
| RequestFailed
| Forbidden
| NotFound
| TooManyRequests
| PinboardServerError
| UnknownHTTPCode
deriving (Show)
data PinboardErrorType
= ConnectionFailure
| HttpStatusFailure
| ParseFailure
| UnknownErrorType
deriving (Eq, Show)
data PinboardErrorCode =
UnknownError
deriving (Show)
data PinboardError = PinboardError
{ errorType :: PinboardErrorType
, errorMsg :: !Text
, errorCode :: Maybe PinboardErrorCode
, errorParam :: Maybe Text
, errorHTTP :: Maybe PinboardErrorHTTPCode
} deriving (Show)
instance Exception PinboardError
defaultPinboardError :: PinboardError
defaultPinboardError = PinboardError UnknownErrorType mempty Nothing Nothing Nothing