    -- | Some helpers for dealing with WAI 'Header's.

    module Network.Wai.Header
        ( contentLength
        ) where

    import qualified Data.ByteString.Char8 as S8
    import Network.HTTP.Types as H

    -- | More useful for a response. A Wai Request already has a requestBodyLength
    contentLength :: [(HeaderName, S8.ByteString)] -> Maybe Integer
    contentLength :: [(HeaderName, ByteString)] -> Maybe Integer
    contentLength hdrs :: [(HeaderName, ByteString)]
    hdrs = HeaderName -> [(HeaderName, ByteString)] -> Maybe ByteString
    forall a b. Eq a => a -> [(a, b)] -> Maybe b
    lookup HeaderName
    H.hContentLength [(HeaderName, ByteString)]
    hdrs Maybe ByteString -> (ByteString -> Maybe Integer) -> Maybe Integer
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= ByteString -> Maybe Integer
    readInt

    readInt :: S8.ByteString -> Maybe Integer
    readInt :: ByteString -> Maybe Integer
    readInt bs :: ByteString
    bs =
        case ByteString -> Maybe (Integer, ByteString)
    S8.readInteger ByteString
    bs of
            Just (i :: Integer
    i, rest :: ByteString
    rest) | ByteString -> Bool
    S8.null ByteString
    rest -> Integer -> Maybe Integer
    forall a. a -> Maybe a
    Just Integer
    i
            _ -> Maybe Integer
    forall a. Maybe a
    Nothing