module WebGear.Core.Request (
Request (..),
remoteHost,
httpVersion,
isSecure,
requestMethod,
pathInfo,
queryString,
requestHeader,
requestHeaders,
requestBodyLength,
getRequestBodyChunk,
) where
import Data.ByteString (ByteString)
import Data.List (find)
import Data.Text (Text)
import qualified Network.HTTP.Types as HTTP
import Network.Socket (SockAddr)
import qualified Network.Wai as Wai
newtype Request = Request
{
Request -> Request
waiRequest :: Wai.Request
}
requestHeader :: HTTP.HeaderName -> Request -> Maybe ByteString
HeaderName
h Request
r = (HeaderName, ByteString) -> ByteString
forall a b. (a, b) -> b
snd ((HeaderName, ByteString) -> ByteString)
-> Maybe (HeaderName, ByteString) -> Maybe ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((HeaderName, ByteString) -> Bool)
-> [(HeaderName, ByteString)] -> Maybe (HeaderName, ByteString)
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((HeaderName -> HeaderName -> Bool
forall a. Eq a => a -> a -> Bool
== HeaderName
h) (HeaderName -> Bool)
-> ((HeaderName, ByteString) -> HeaderName)
-> (HeaderName, ByteString)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (HeaderName, ByteString) -> HeaderName
forall a b. (a, b) -> a
fst) (Request -> [(HeaderName, ByteString)]
requestHeaders Request
r)
getRequestBodyChunk :: Request -> IO ByteString
getRequestBodyChunk :: Request -> IO ByteString
getRequestBodyChunk = Request -> IO ByteString
Wai.getRequestBodyChunk (Request -> IO ByteString)
-> (Request -> Request) -> Request -> IO ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
httpVersion :: Request -> HTTP.HttpVersion
httpVersion :: Request -> HttpVersion
httpVersion = Request -> HttpVersion
Wai.httpVersion (Request -> HttpVersion)
-> (Request -> Request) -> Request -> HttpVersion
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
isSecure :: Request -> Bool
isSecure :: Request -> Bool
isSecure = Request -> Bool
Wai.isSecure (Request -> Bool) -> (Request -> Request) -> Request -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
pathInfo :: Request -> [Text]
pathInfo :: Request -> [Text]
pathInfo = Request -> [Text]
Wai.pathInfo (Request -> [Text]) -> (Request -> Request) -> Request -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
queryString :: Request -> HTTP.Query
queryString :: Request -> Query
queryString = Request -> Query
Wai.queryString (Request -> Query) -> (Request -> Request) -> Request -> Query
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
remoteHost :: Request -> SockAddr
remoteHost :: Request -> SockAddr
remoteHost = Request -> SockAddr
Wai.remoteHost (Request -> SockAddr)
-> (Request -> Request) -> Request -> SockAddr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
requestBodyLength :: Request -> Wai.RequestBodyLength
requestBodyLength :: Request -> RequestBodyLength
requestBodyLength = Request -> RequestBodyLength
Wai.requestBodyLength (Request -> RequestBodyLength)
-> (Request -> Request) -> Request -> RequestBodyLength
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
requestHeaders :: Request -> HTTP.RequestHeaders
= Request -> [(HeaderName, ByteString)]
Wai.requestHeaders (Request -> [(HeaderName, ByteString)])
-> (Request -> Request) -> Request -> [(HeaderName, ByteString)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest
requestMethod :: Request -> HTTP.Method
requestMethod :: Request -> ByteString
requestMethod = Request -> ByteString
Wai.requestMethod (Request -> ByteString)
-> (Request -> Request) -> Request -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
waiRequest