{-# language DeriveAnyClass #-}
{-# language DerivingStrategies #-}

module Kafka.Exchange.Error
  ( Error(..)
  , Message(..)
  ) where

import Control.Exception (Exception)

import qualified Kafka.Message.Request.V2 as Message.Request

data Error = Error
  { Error -> Header
context :: !Message.Request.Header
    -- ^ This tells us what kind of request was made and
    -- what the correlation ID was.
  , Error -> Message
message :: Message
    -- ^ What kind of failure happened?
  }
  deriving stock (Int -> Error -> ShowS
[Error] -> ShowS
Error -> String
(Int -> Error -> ShowS)
-> (Error -> String) -> ([Error] -> ShowS) -> Show Error
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Error -> ShowS
showsPrec :: Int -> Error -> ShowS
$cshow :: Error -> String
show :: Error -> String
$cshowList :: [Error] -> ShowS
showList :: [Error] -> ShowS
Show)
  deriving anyclass (Show Error
Typeable Error
(Typeable Error, Show Error) =>
(Error -> SomeException)
-> (SomeException -> Maybe Error)
-> (Error -> String)
-> Exception Error
SomeException -> Maybe Error
Error -> String
Error -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> String) -> Exception e
$ctoException :: Error -> SomeException
toException :: Error -> SomeException
$cfromException :: SomeException -> Maybe Error
fromException :: SomeException -> Maybe Error
$cdisplayException :: Error -> String
displayException :: Error -> String
Exception)

data Message
  = RequestMessageNotSent
  | ResponseLengthNotReceived
  | ResponseLengthNegative
  | ResponseLengthTooHigh
  | ResponseMessageNotReceived
  | ResponseHeaderMalformed
  | ResponseBodyMalformed
  | ResponseHeaderVersionUnsupported
  | ResponseIncorrectCorrelationId
  deriving stock (Int -> Message -> ShowS
[Message] -> ShowS
Message -> String
(Int -> Message -> ShowS)
-> (Message -> String) -> ([Message] -> ShowS) -> Show Message
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Message -> ShowS
showsPrec :: Int -> Message -> ShowS
$cshow :: Message -> String
show :: Message -> String
$cshowList :: [Message] -> ShowS
showList :: [Message] -> ShowS
Show)