http-kit-0.4.0: src/Network/HTTP/Toolkit/Error.hs
{-# LANGUAGE DeriveDataTypeable #-}
module Network.HTTP.Toolkit.Error where
import Data.Typeable
import Control.Monad (guard)
import Control.Exception
import Data.ByteString (ByteString)
data ToolkitError =
-- | The input ended unpexpectedly while reading a message.
UnexpectedEndOfInput
-- | The request-line of the message is malformed.
| InvalidRequestLine ByteString
-- | The status-line of the message is malformed.
| InvalidStatusLine ByteString
-- | A header field is malformed.
| InvalidHeader
-- | The start-line of the message and all header fields together exceed
-- the specified size `Network.HTTP.Toolkit.Header.Limit`.
| HeaderTooLarge
-- | The size of a body chunk exceeds
-- `Network.HTTP.Toolkit.Body.maxChunkSize`.
| ChunkTooLarge
-- | A body chunk is malformed.
| InvalidChunk
deriving (Eq, Show, Typeable)
instance Exception ToolkitError
catchOnly :: (Eq e, Exception e) => IO a -> e -> IO a -> IO a
(action `catchOnly` e) handler = catchJust (guard . (== e)) action $ \() -> handler