{-# 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))) ]