module Servant.Server.Internal.RoutingApplication where

import           Network.Wai
                 (Application, Request, Response, ResponseReceived)
import           Servant.Server.Internal.RouteResult
import           Servant.Server.Internal.ServerError

type RoutingApplication =
     Request -- ^ the request, the field 'pathInfo' may be modified by url routing
  -> (RouteResult Response -> IO ResponseReceived) -> IO ResponseReceived

toApplication :: RoutingApplication -> Application
toApplication :: RoutingApplication -> Application
toApplication RoutingApplication
ra Request
request Response -> IO ResponseReceived
respond = RoutingApplication
ra Request
request RouteResult Response -> IO ResponseReceived
routingRespond
 where
  routingRespond :: RouteResult Response -> IO ResponseReceived
  routingRespond :: RouteResult Response -> IO ResponseReceived
routingRespond (Fail ServerError
err)      = Response -> IO ResponseReceived
respond (Response -> IO ResponseReceived)
-> Response -> IO ResponseReceived
forall a b. (a -> b) -> a -> b
$ ServerError -> Response
responseServerError ServerError
err
  routingRespond (FailFatal ServerError
err) = Response -> IO ResponseReceived
respond (Response -> IO ResponseReceived)
-> Response -> IO ResponseReceived
forall a b. (a -> b) -> a -> b
$ ServerError -> Response
responseServerError ServerError
err
  routingRespond (Route Response
v)       = Response -> IO ResponseReceived
respond Response
v