module Data.IterIO.Http.Support.Routing (
runLHttpRoute
) where
import Data.Char
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.ByteString.Char8 as S
import Data.Maybe
import Data.IterIO.Http
import Data.IterIO.HttpRoute
import Data.IterIO.Iter
upcase :: S.ByteString -> S.ByteString
upcase = S.map toUpper
runLHttpRoute :: Monad m
=> HttpRoute m s
-> HttpReq s
-> Iter L.ByteString m (HttpResp m)
runLHttpRoute route req = runHttpRoute route $ transformedReq
where method = upcase $ reqMethod req
overrideHeader = lookup "X-HTTP-Method-Override" (reqHeaders req)
transformedReq
| method /= "GET" && method /= "POST" = req
| isJust overrideHeader =
req{reqMethod = (upcase . fromJust $ overrideHeader)}
| otherwise = req