packages feed

natskell-1.0.0.1: internal/Types/Err.hs

module Types.Err
  ( Reason
  , Err (..)
  , errReason
  , isFatal
  ) where

import           Data.ByteString (ByteString)

type Reason = ByteString

data Err = ErrUnknownOp Reason
         | ErrRoutePortConn Reason
         | ErrAuthViolation Reason
         | ErrAuthTimeout Reason
         | ErrAuthExpired Reason
         | ErrAuthRevoked Reason
         | ErrAccountAuthExpired Reason
         | ErrInvalidProtocol Reason
         | ErrMaxControlLineEx Reason
         | ErrErr Reason
         | ErrTlsRequired Reason
         | ErrStaleConn Reason
         | ErrMaxConnsEx Reason
         | ErrSlowConsumer Reason
         | ErrMaxPayload Reason
         | ErrInvalidSubject Reason
         | ErrPermViolation Reason
  deriving (Eq, Show)

isFatal :: Err -> Bool
isFatal (ErrInvalidSubject _) = False
isFatal (ErrPermViolation _)  = False
isFatal _                     = True

errReason :: Err -> Reason
errReason err =
  case err of
    ErrUnknownOp reason          -> reason
    ErrRoutePortConn reason      -> reason
    ErrAuthViolation reason      -> reason
    ErrAuthTimeout reason        -> reason
    ErrAuthExpired reason        -> reason
    ErrAuthRevoked reason        -> reason
    ErrAccountAuthExpired reason -> reason
    ErrInvalidProtocol reason    -> reason
    ErrMaxControlLineEx reason   -> reason
    ErrErr reason                -> reason
    ErrTlsRequired reason        -> reason
    ErrStaleConn reason          -> reason
    ErrMaxConnsEx reason         -> reason
    ErrSlowConsumer reason       -> reason
    ErrMaxPayload reason         -> reason
    ErrInvalidSubject reason     -> reason
    ErrPermViolation reason      -> reason