{-# LANGUAGE OverloadedStrings #-}
module Network.HTTP2.Client (
run
, Scheme
, Authority
, ClientConfig(..)
, Config(..)
, allocSimpleConfig
, freeSimpleConfig
, Client
, Request
, requestNoBody
, requestFile
, requestStreaming
, requestBuilder
, TrailersMaker
, NextTrailersMaker(..)
, defaultTrailersMaker
, setRequestTrailersMaker
, Response
, responseStatus
, responseHeaders
, responseBodySize
, getResponseBodyChunk
, getResponseTrailers
, Method
, Path
, FileSpec(..)
, FileOffset
, ByteCount
, defaultReadN
, PositionReadMaker
, PositionRead
, Sentinel(..)
, defaultPositionReadMaker
) where
import Data.ByteString (ByteString)
import Data.ByteString.Builder (Builder)
import Data.IORef (readIORef)
import Network.HTTP.Types
import Network.HPACK
import Network.HTTP2.Arch
import Network.HTTP2.Client.Types
import Network.HTTP2.Client.Run
requestNoBody :: Method -> Path -> RequestHeaders -> Request
requestNoBody :: Method -> Method -> RequestHeaders -> Request
requestNoBody Method
m Method
p RequestHeaders
hdr = OutObj -> Request
Request (OutObj -> Request) -> OutObj -> Request
forall a b. (a -> b) -> a -> b
$ RequestHeaders -> OutBody -> TrailersMaker -> OutObj
OutObj RequestHeaders
hdr' OutBody
OutBodyNone TrailersMaker
defaultTrailersMaker
where
hdr' :: RequestHeaders
hdr' = Method -> Method -> RequestHeaders -> RequestHeaders
addHeaders Method
m Method
p RequestHeaders
hdr
requestFile :: Method -> Path -> RequestHeaders -> FileSpec -> Request
requestFile :: Method -> Method -> RequestHeaders -> FileSpec -> Request
requestFile Method
m Method
p RequestHeaders
hdr FileSpec
fileSpec = OutObj -> Request
Request (OutObj -> Request) -> OutObj -> Request
forall a b. (a -> b) -> a -> b
$ RequestHeaders -> OutBody -> TrailersMaker -> OutObj
OutObj RequestHeaders
hdr' (FileSpec -> OutBody
OutBodyFile FileSpec
fileSpec) TrailersMaker
defaultTrailersMaker
where
hdr' :: RequestHeaders
hdr' = Method -> Method -> RequestHeaders -> RequestHeaders
addHeaders Method
m Method
p RequestHeaders
hdr
requestBuilder :: Method -> Path -> RequestHeaders -> Builder -> Request
requestBuilder :: Method -> Method -> RequestHeaders -> Builder -> Request
requestBuilder Method
m Method
p RequestHeaders
hdr Builder
builder = OutObj -> Request
Request (OutObj -> Request) -> OutObj -> Request
forall a b. (a -> b) -> a -> b
$ RequestHeaders -> OutBody -> TrailersMaker -> OutObj
OutObj RequestHeaders
hdr' (Builder -> OutBody
OutBodyBuilder Builder
builder) TrailersMaker
defaultTrailersMaker
where
hdr' :: RequestHeaders
hdr' = Method -> Method -> RequestHeaders -> RequestHeaders
addHeaders Method
m Method
p RequestHeaders
hdr
requestStreaming :: Method -> Path -> RequestHeaders
-> ((Builder -> IO ()) -> IO () -> IO ())
-> Request
requestStreaming :: Method
-> Method
-> RequestHeaders
-> ((Builder -> IO ()) -> IO () -> IO ())
-> Request
requestStreaming Method
m Method
p RequestHeaders
hdr (Builder -> IO ()) -> IO () -> IO ()
strmbdy = OutObj -> Request
Request (OutObj -> Request) -> OutObj -> Request
forall a b. (a -> b) -> a -> b
$ RequestHeaders -> OutBody -> TrailersMaker -> OutObj
OutObj RequestHeaders
hdr' (((Builder -> IO ()) -> IO () -> IO ()) -> OutBody
OutBodyStreaming (Builder -> IO ()) -> IO () -> IO ()
strmbdy) TrailersMaker
defaultTrailersMaker
where
hdr' :: RequestHeaders
hdr' = Method -> Method -> RequestHeaders -> RequestHeaders
addHeaders Method
m Method
p RequestHeaders
hdr
addHeaders :: Method -> Path -> RequestHeaders -> RequestHeaders
Method
m Method
p RequestHeaders
hdr = (HeaderName
":method", Method
m) (HeaderName, Method) -> RequestHeaders -> RequestHeaders
forall a. a -> [a] -> [a]
: (HeaderName
":path", Method
p) (HeaderName, Method) -> RequestHeaders -> RequestHeaders
forall a. a -> [a] -> [a]
: RequestHeaders
hdr
setRequestTrailersMaker :: Request -> TrailersMaker -> Request
setRequestTrailersMaker :: Request -> TrailersMaker -> Request
setRequestTrailersMaker (Request OutObj
req) TrailersMaker
tm = OutObj -> Request
Request OutObj
req { outObjTrailers :: TrailersMaker
outObjTrailers = TrailersMaker
tm }
responseStatus :: Response -> Maybe Status
responseStatus :: Response -> Maybe Status
responseStatus (Response InpObj
rsp) = HeaderTable -> Maybe Status
getStatus (HeaderTable -> Maybe Status) -> HeaderTable -> Maybe Status
forall a b. (a -> b) -> a -> b
$ InpObj -> HeaderTable
inpObjHeaders InpObj
rsp
responseHeaders :: Response -> HeaderTable
(Response InpObj
rsp) = InpObj -> HeaderTable
inpObjHeaders InpObj
rsp
responseBodySize :: Response -> Maybe Int
responseBodySize :: Response -> Maybe Int
responseBodySize (Response InpObj
rsp) = InpObj -> Maybe Int
inpObjBodySize InpObj
rsp
getResponseBodyChunk :: Response -> IO ByteString
getResponseBodyChunk :: Response -> IO Method
getResponseBodyChunk (Response InpObj
rsp) = InpObj -> IO Method
inpObjBody InpObj
rsp
getResponseTrailers :: Response -> IO (Maybe HeaderTable)
getResponseTrailers :: Response -> IO (Maybe HeaderTable)
getResponseTrailers (Response InpObj
rsp) = IORef (Maybe HeaderTable) -> IO (Maybe HeaderTable)
forall a. IORef a -> IO a
readIORef (InpObj -> IORef (Maybe HeaderTable)
inpObjTrailers InpObj
rsp)