{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
module Servant.Client.Core.ClientError (
ClientError (..),
) where
import Prelude ()
import Prelude.Compat
import Control.DeepSeq
(NFData (..))
import Control.Exception
(SomeException (..))
import Control.Monad.Catch
(Exception)
import qualified Data.ByteString as BS
import Data.Text
(Text)
import Data.Typeable
(Typeable, typeOf)
import GHC.Generics
(Generic)
import Network.HTTP.Media
(MediaType)
import Network.HTTP.Types ()
import Servant.Client.Core.BaseUrl
import Servant.Client.Core.Internal
(mediaTypeRnf)
import Servant.Client.Core.Request
import Servant.Client.Core.Response
data ClientError =
FailureResponse (RequestF () (BaseUrl, BS.ByteString)) Response
| DecodeFailure Text Response
| UnsupportedContentType MediaType Response
| Response
| ConnectionError SomeException
deriving (Int -> ClientError -> ShowS
[ClientError] -> ShowS
ClientError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ClientError] -> ShowS
$cshowList :: [ClientError] -> ShowS
show :: ClientError -> String
$cshow :: ClientError -> String
showsPrec :: Int -> ClientError -> ShowS
$cshowsPrec :: Int -> ClientError -> ShowS
Show, forall x. Rep ClientError x -> ClientError
forall x. ClientError -> Rep ClientError x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ClientError x -> ClientError
$cfrom :: forall x. ClientError -> Rep ClientError x
Generic, Typeable)
instance Eq ClientError where
FailureResponse RequestF () (BaseUrl, ByteString)
req Response
res == :: ClientError -> ClientError -> Bool
== FailureResponse RequestF () (BaseUrl, ByteString)
req' Response
res' = RequestF () (BaseUrl, ByteString)
req forall a. Eq a => a -> a -> Bool
== RequestF () (BaseUrl, ByteString)
req' Bool -> Bool -> Bool
&& Response
res forall a. Eq a => a -> a -> Bool
== Response
res'
DecodeFailure Text
t Response
r == DecodeFailure Text
t' Response
r' = Text
t forall a. Eq a => a -> a -> Bool
== Text
t' Bool -> Bool -> Bool
&& Response
r forall a. Eq a => a -> a -> Bool
== Response
r'
UnsupportedContentType MediaType
mt Response
r == UnsupportedContentType MediaType
mt' Response
r' = MediaType
mt forall a. Eq a => a -> a -> Bool
== MediaType
mt' Bool -> Bool -> Bool
&& Response
r forall a. Eq a => a -> a -> Bool
== Response
r'
InvalidContentTypeHeader Response
r == InvalidContentTypeHeader Response
r' = Response
r forall a. Eq a => a -> a -> Bool
== Response
r'
ConnectionError SomeException
exc == ConnectionError SomeException
exc' = SomeException -> SomeException -> Bool
eqSomeException SomeException
exc SomeException
exc'
where
eqSomeException :: SomeException -> SomeException -> Bool
eqSomeException (SomeException e
a) (SomeException e
b) = forall a. Typeable a => a -> TypeRep
typeOf e
a forall a. Eq a => a -> a -> Bool
== forall a. Typeable a => a -> TypeRep
typeOf e
b
FailureResponse {} == ClientError
_ = Bool
False
DecodeFailure {} == ClientError
_ = Bool
False
UnsupportedContentType {} == ClientError
_ = Bool
False
InvalidContentTypeHeader {} == ClientError
_ = Bool
False
ConnectionError {} == ClientError
_ = Bool
False
instance Exception ClientError
instance NFData ClientError where
rnf :: ClientError -> ()
rnf (FailureResponse RequestF () (BaseUrl, ByteString)
req Response
res) = forall a. NFData a => a -> ()
rnf RequestF () (BaseUrl, ByteString)
req seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf Response
res
rnf (DecodeFailure Text
err Response
res) = forall a. NFData a => a -> ()
rnf Text
err seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf Response
res
rnf (UnsupportedContentType MediaType
mt' Response
res) = MediaType -> ()
mediaTypeRnf MediaType
mt' seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf Response
res
rnf (InvalidContentTypeHeader Response
res) = forall a. NFData a => a -> ()
rnf Response
res
rnf (ConnectionError SomeException
err) = SomeException
err seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf (forall a. Show a => a -> String
show SomeException
err)