wai-predicates-0.6: src/Network/Wai/Predicate/Error.hs
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.
module Network.Wai.Predicate.Error
( Error
, Reason (..)
, err
, e400
, e405
, e406
, e415
, e500
, status
, message
, reason
, source
, labels
, setStatus
, setMessage
, setReason
, setSource
, addLabel
, isReasonOf
) where
import Data.ByteString (ByteString)
import Network.HTTP.Types.Status
data Reason
= NotAvailable
| TypeError
deriving (Eq, Show)
-- | The error type used as meta-data for @Fail@ in all WAI predicates.
data Error = Error
{ status :: !Status -- ^ HTTP status code
, message :: Maybe ByteString -- ^ optional status message
, reason :: Maybe Reason -- ^ optional reason for this error
, source :: Maybe ByteString -- ^ optional source of this erro
, labels :: [ByteString] -- ^ optional free-text labels
} deriving (Eq, Show)
err :: Status -> Error
err s = Error s Nothing Nothing Nothing []
setStatus :: Status -> Error -> Error
setStatus s e = e { status = s }
setMessage :: ByteString -> Error -> Error
setMessage m e = e { message = Just m }
setReason :: Reason -> Error -> Error
setReason r e = e { reason = Just r }
setSource :: ByteString -> Error -> Error
setSource s e = e { source = Just s }
addLabel :: ByteString -> Error -> Error
addLabel l e = e { labels = l : labels e }
isReasonOf :: Reason -> Error -> Bool
isReasonOf r e = maybe False (r ==) (reason e)
e400, e405, e406, e415, e500 :: Error
e400 = err status400
e405 = err status405
e406 = err status406
e415 = err status415
e500 = err status500