    {-# LANGUAGE OverloadedStrings #-}

    module Network.Wai.Application.Classic.Redirect (
        redirectApp
      ) where

    import Data.ByteString.Char8
    import Network.HTTP.Types
    import Network.Wai
    import Network.Wai.Application.Classic.Field
    import Network.Wai.Application.Classic.Path
    import Network.Wai.Application.Classic.Types

    redirectApp :: ClassicAppSpec -> RedirectRoute -> Application
    redirectApp :: ClassicAppSpec -> RedirectRoute -> Application
    redirectApp ClassicAppSpec
    _ RedirectRoute
    route Request
    req Response -> IO ResponseReceived
    respond =
        Response -> IO ResponseReceived
    respond (Response -> IO ResponseReceived)
    -> Response -> IO ResponseReceived
    forall a b. (a -> b) -> a -> b
    $ Status -> ResponseHeaders -> ByteString -> Response
    responseLBS Status
    status ResponseHeaders
    hdr ByteString
    ""
      where
        path :: ByteString
    path = Request -> ByteString
    rawPathInfo Request
    req
        src :: ByteString
    src = RedirectRoute -> ByteString
    redirectSrc RedirectRoute
    route
        dst :: ByteString
    dst = RedirectRoute -> ByteString
    redirectDst RedirectRoute
    route
        -- Scheme must not be included because of no way to tell
        -- http or https.
        rurl :: ByteString
    rurl = ByteString
    "//" ByteString -> ByteString -> ByteString
    `append` (ByteString
    dst ByteString -> ByteString -> ByteString
    </> (ByteString
    path ByteString -> ByteString -> ByteString
    <\> ByteString
    src))
        hdr :: ResponseHeaders
    hdr = ByteString -> ResponseHeaders
    locationHeader ByteString
    rurl
        status :: Status
    status = Status
    movedPermanently301