{-# OPTIONS_HADDOCK not-home #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE RecordWildCards #-}
module Network.Wai.Internal where
import Data.ByteString.Builder (Builder)
import qualified Data.ByteString as B hiding (pack)
import Data.Text (Text)
import Data.Typeable (Typeable)
import Data.Vault.Lazy (Vault)
import Data.Word (Word64)
import qualified Network.HTTP.Types as H
import Network.Socket (SockAddr)
import Data.List (intercalate)
{-# DEPRECATED requestBody "requestBody's name is misleading because it only gets a partial chunk of the body. Use getRequestBodyChunk instead." #-}
data Request = Request {
Request -> Method
requestMethod :: H.Method
, Request -> HttpVersion
httpVersion :: H.HttpVersion
, Request -> Method
rawPathInfo :: B.ByteString
, Request -> Method
rawQueryString :: B.ByteString
, :: H.RequestHeaders
, Request -> Bool
isSecure :: Bool
, Request -> SockAddr
remoteHost :: SockAddr
, Request -> [Text]
pathInfo :: [Text]
, Request -> Query
queryString :: H.Query
, Request -> IO Method
requestBody :: IO B.ByteString
, Request -> Vault
vault :: Vault
, Request -> RequestBodyLength
requestBodyLength :: RequestBodyLength
, :: Maybe B.ByteString
, :: Maybe B.ByteString
, :: Maybe B.ByteString
, :: Maybe B.ByteString
}
deriving (Typeable)
getRequestBodyChunk :: Request -> IO B.ByteString
getRequestBodyChunk :: Request -> IO Method
getRequestBodyChunk = Request -> IO Method
requestBody
instance Show Request where
show :: Request -> String
show Request{..} = "Request {" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate ", " [String
a String -> ShowS
forall a. [a] -> [a] -> [a]
++ " = " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
b | (a :: String
a,b :: String
b) <- [(String, String)]
fields] String -> ShowS
forall a. [a] -> [a] -> [a]
++ "}"
where
fields :: [(String, String)]
fields =
[("requestMethod",Method -> String
forall a. Show a => a -> String
show Method
requestMethod)
,("httpVersion",HttpVersion -> String
forall a. Show a => a -> String
show HttpVersion
httpVersion)
,("rawPathInfo",Method -> String
forall a. Show a => a -> String
show Method
rawPathInfo)
,("rawQueryString",Method -> String
forall a. Show a => a -> String
show Method
rawQueryString)
,("requestHeaders",RequestHeaders -> String
forall a. Show a => a -> String
show RequestHeaders
requestHeaders)
,("isSecure",Bool -> String
forall a. Show a => a -> String
show Bool
isSecure)
,("remoteHost",SockAddr -> String
forall a. Show a => a -> String
show SockAddr
remoteHost)
,("pathInfo",[Text] -> String
forall a. Show a => a -> String
show [Text]
pathInfo)
,("queryString",Query -> String
forall a. Show a => a -> String
show Query
queryString)
,("requestBody","<IO ByteString>")
,("vault","<Vault>")
,("requestBodyLength",RequestBodyLength -> String
forall a. Show a => a -> String
show RequestBodyLength
requestBodyLength)
,("requestHeaderHost",Maybe Method -> String
forall a. Show a => a -> String
show Maybe Method
requestHeaderHost)
,("requestHeaderRange",Maybe Method -> String
forall a. Show a => a -> String
show Maybe Method
requestHeaderRange)
]
data Response
= ResponseFile H.Status H.ResponseHeaders FilePath (Maybe FilePart)
| ResponseBuilder H.Status H.ResponseHeaders Builder
| ResponseStream H.Status H.ResponseHeaders StreamingBody
| ResponseRaw (IO B.ByteString -> (B.ByteString -> IO ()) -> IO ()) Response
deriving Typeable
type StreamingBody = (Builder -> IO ()) -> IO () -> IO ()
data RequestBodyLength = ChunkedBody | KnownLength Word64 deriving Int -> RequestBodyLength -> ShowS
[RequestBodyLength] -> ShowS
RequestBodyLength -> String
(Int -> RequestBodyLength -> ShowS)
-> (RequestBodyLength -> String)
-> ([RequestBodyLength] -> ShowS)
-> Show RequestBodyLength
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RequestBodyLength] -> ShowS
$cshowList :: [RequestBodyLength] -> ShowS
show :: RequestBodyLength -> String
$cshow :: RequestBodyLength -> String
showsPrec :: Int -> RequestBodyLength -> ShowS
$cshowsPrec :: Int -> RequestBodyLength -> ShowS
Show
data FilePart = FilePart
{ FilePart -> Integer
filePartOffset :: Integer
, FilePart -> Integer
filePartByteCount :: Integer
, FilePart -> Integer
filePartFileSize :: Integer
} deriving Int -> FilePart -> ShowS
[FilePart] -> ShowS
FilePart -> String
(Int -> FilePart -> ShowS)
-> (FilePart -> String) -> ([FilePart] -> ShowS) -> Show FilePart
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FilePart] -> ShowS
$cshowList :: [FilePart] -> ShowS
show :: FilePart -> String
$cshow :: FilePart -> String
showsPrec :: Int -> FilePart -> ShowS
$cshowsPrec :: Int -> FilePart -> ShowS
Show
data ResponseReceived = ResponseReceived
deriving Typeable