-- | Internal API error type

{-# LANGUAGE RecordWildCards #-}

{-# OPTIONS_HADDOCK hide #-}

module Blockfrost.Types.ApiError
  ( ApiError (..)
  ) where

import Data.Aeson
import Data.Text (Text)
import GHC.Generics

-- | Fancy JSON error returned
-- by the server
data ApiError = ApiError
  { ApiError -> Text
apiError        :: Text
  , ApiError -> Text
apiErrorMessage :: Text
  , ApiError -> Int
apiErrorCode    :: Int
  } deriving (ApiError -> ApiError -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ApiError -> ApiError -> Bool
$c/= :: ApiError -> ApiError -> Bool
== :: ApiError -> ApiError -> Bool
$c== :: ApiError -> ApiError -> Bool
Eq, Int -> ApiError -> ShowS
[ApiError] -> ShowS
ApiError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ApiError] -> ShowS
$cshowList :: [ApiError] -> ShowS
show :: ApiError -> String
$cshow :: ApiError -> String
showsPrec :: Int -> ApiError -> ShowS
$cshowsPrec :: Int -> ApiError -> ShowS
Show, forall x. Rep ApiError x -> ApiError
forall x. ApiError -> Rep ApiError x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ApiError x -> ApiError
$cfrom :: forall x. ApiError -> Rep ApiError x
Generic)

instance ToJSON ApiError  where
  toJSON :: ApiError -> Value
toJSON ApiError{Int
Text
apiErrorCode :: Int
apiErrorMessage :: Text
apiError :: Text
apiErrorCode :: ApiError -> Int
apiErrorMessage :: ApiError -> Text
apiError :: ApiError -> Text
..} =
    [Pair] -> Value
object [ Key
"error" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= forall a. ToJSON a => a -> Value
toJSON Text
apiError
           , Key
"message" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= forall a. ToJSON a => a -> Value
toJSON Text
apiErrorMessage
           , Key
"status_code" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= forall a. ToJSON a => a -> Value
toJSON Int
apiErrorCode
           ]

instance FromJSON ApiError  where
  parseJSON :: Value -> Parser ApiError
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"error" forall a b. (a -> b) -> a -> b
$ \Object
o -> do
    Text
apiError <- Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"error"
    Text
apiErrorMessage <- Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message"
    Int
apiErrorCode <- Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"status_code"
    forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ApiError {Int
Text
apiErrorCode :: Int
apiErrorMessage :: Text
apiError :: Text
apiErrorCode :: Int
apiErrorMessage :: Text
apiError :: Text
..}