df1-wai-0.1: lib/Df1/Wai.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Df1.Wai (request, response) where
import Data.ByteString.Builder qualified as BB
import Data.Functor
import Data.List qualified as List
import Data.Maybe
import Data.Text.Encoding qualified as T
import Data.Text.Lazy qualified as TL
import Data.Text.Lazy.Encoding qualified as TL
import Df1
import Network.HTTP.Types
import Network.Wai
request :: Request -> [(Key, Value)]
request r =
mconcat
[ maybeToList $
requestHeaderHost r <&> \x ->
("host", value (T.decodeUtf8 x))
,
[ ("method", value (T.decodeUtf8 (requestMethod r)))
,
( "path"
, value (TL.fromChunks ("/" : List.intersperse "/" (pathInfo r)))
)
,
( "query"
, value $
TL.decodeUtf8 $
BB.toLazyByteString $
"?" <> renderQueryBuilder False (queryString r)
)
, ("peer", value (show (remoteHost r)))
]
, maybeToList $
requestHeaderReferer r <&> \x ->
("referer", value (T.decodeUtf8 x))
]
response :: Response -> [(Key, Value)]
response r =
[ ("status", value (statusCode (responseStatus r)))
]