@@ -1,15 +1,15 @@
1−{-# LANGUAGE CPP #-}
2−{-# LANGUAGE DataKinds #-}
3−{-# LANGUAGE FlexibleContexts #-}
4−{-# LANGUAGE FlexibleInstances #-}
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
3+{-# LANGUAGE FlexibleContexts #-}
4+{-# LANGUAGE FlexibleInstances #-}
55{-# LANGUAGE GeneralizedNewtypeDeriving #-}
6−{-# LANGUAGE OverloadedStrings #-}
7−{-# LANGUAGE PolyKinds #-}
8−{-# LANGUAGE ScopedTypeVariables #-}
9−{-# LANGUAGE TypeFamilies #-}
10−{-# LANGUAGE TypeOperators #-}
6+{-# LANGUAGE OverloadedStrings #-}
7+{-# LANGUAGE PolyKinds #-}
8+{-# LANGUAGE ScopedTypeVariables #-}
9+{-# LANGUAGE TypeFamilies #-}
10+{-# LANGUAGE TypeOperators #-}
1111#if !MIN_VERSION_base(4,8,0)
12−{-# LANGUAGE OverlappingInstances #-}
12+{-# LANGUAGE OverlappingInstances #-}
1313#endif
1414
1515module Servant.Server.Internal
@@ -26,9 +26,9 @@ import Control.Monad.Trans.Except (ExceptT)
2626import qualified Data.ByteString as B
2727import qualified Data.ByteString.Lazy as BL
2828import qualified Data.Map as M
29−import Data.Maybe (mapMaybe, fromMaybe)
29+import Data.Maybe (fromMaybe, mapMaybe)
3030import Data.String (fromString)
31−import Data.String.Conversions (cs, (<>), ConvertibleStrings)
31+import Data.String.Conversions (ConvertibleStrings, cs, (<>))
3232import Data.Text (Text)
3333import Data.Typeable
3434import GHC.TypeLits (KnownSymbol, symbolVal)
@@ -47,8 +47,8 @@ import Servant.API ((:<|>) (..), (:>), Capture,
4747import Servant.API.ContentTypes (AcceptHeader (..),
4848 AllCTRender (..),
4949 AllCTUnrender (..))
50−import Servant.API.ResponseHeaders (Headers, getResponse, GetHeaders,
51− getHeaders)
50+import Servant.API.ResponseHeaders (GetHeaders, Headers, getHeaders,
51+ getResponse)
5252
5353import Servant.Server.Internal.Router
5454import Servant.Server.Internal.RoutingApplication
@@ -114,7 +114,7 @@ instance (KnownSymbol capture, FromHttpApiData a, HasServer sublayout)
114114
115115 route Proxy subserver =
116116 DynamicRouter $ \ first -> case captured captureProxy first of
117− Nothing -> LeafRouter (\_ r -> r $ failWith err404)
117+ Nothing -> LeafRouter (\_ r -> r $ Fail err404)
118118 Just v -> route (Proxy :: Proxy sublayout) (feedTo subserver v)
119119
120120 where captureProxy = Proxy :: Proxy (Capture capture a)
@@ -130,8 +130,8 @@ processMethodRouter :: forall a. ConvertibleStrings a B.ByteString
130130 -> Maybe [(HeaderName, B.ByteString)]
131131 -> Request -> RouteResult Response
132132processMethodRouter handleA status method headers request = case handleA of
133− Nothing -> failFatallyWith err406
134− Just (contentT, body) -> succeedWith $ responseLBS status hdrs bdy
133+ Nothing -> FailFatal err406
134+ Just (contentT, body) -> Route $! responseLBS status hdrs bdy
135135 where
136136 bdy = if allowedMethodHead method request then "" else body
137137 hdrs = (hContentType, cs contentT) : (fromMaybe [] headers)
@@ -149,8 +149,8 @@ methodRouter method proxy status action = LeafRouter route'
149149 handleA = handleAcceptH proxy (AcceptHeader accH) output
150150 processMethodRouter handleA status method Nothing request
151151 | pathIsEmpty request && requestMethod request /= method =
152− respond $ failWith err405
153− | otherwise = respond $ failWith err404
152+ respond $ Fail err405
153+ | otherwise = respond $ Fail err404
154154
155155methodRouterHeaders :: (GetHeaders (Headers h v), AllCTRender ctypes v)
156156 => Method -> Proxy ctypes -> Status
@@ -166,8 +166,8 @@ methodRouterHeaders method proxy status action = LeafRouter route'
166166 handleA = handleAcceptH proxy (AcceptHeader accH) (getResponse output)
167167 processMethodRouter handleA status method (Just headers) request
168168 | pathIsEmpty request && requestMethod request /= method =
169− respond $ failWith err405
170− | otherwise = respond $ failWith err404
169+ respond $ Fail err405
170+ | otherwise = respond $ Fail err404
171171
172172methodRouterEmpty :: Method
173173 -> IO (RouteResult (ExceptT ServantErr IO ()))
@@ -177,10 +177,10 @@ methodRouterEmpty method action = LeafRouter route'
177177 route' request respond
178178 | pathIsEmpty request && allowedMethod method request = do
179179 runAction action respond $ \ () ->
180− succeedWith $ responseLBS noContent204 [] ""
180+ Route $! responseLBS noContent204 [] ""
181181 | pathIsEmpty request && requestMethod request /= method =
182− respond $ failWith err405
183− | otherwise = respond $ failWith err404
182+ respond $ Fail err405
183+ | otherwise = respond $ Fail err404
184184
185185-- | If you have a 'Delete' endpoint in your API,
186186-- the handler for this endpoint is meant to delete
@@ -557,9 +557,9 @@ instance HasServer Raw where
557557 route Proxy rawApplication = LeafRouter $ \ request respond -> do
558558 r <- rawApplication
559559 case r of
560− HandlerVal app -> app request (respond . succeedWith)
561− Retriable e -> respond $ failWith e
562− NonRetriable e -> respond $! failFatallyWith e
560+ Route app -> app request (respond . Route)
561+ Fail a -> respond $ Fail a
562+ FailFatal e -> respond $ FailFatal e
563563
564564-- | If you use 'ReqBody' in one of the endpoints for your API,
565565-- this automatically requires your server-side handler to be a function
@@ -599,8 +599,8 @@ instance ( AllCTUnrender list a, HasServer sublayout
599599 mrqbody <- handleCTypeH (Proxy :: Proxy list) (cs contentTypeH)
600600 <$> lazyRequestBody request
601601 case mrqbody of
602− Nothing -> return $! failFatallyWith err415
603− Just (Left e) -> return $! failFatallyWith err400 { errBody = cs e }
602+ Nothing -> return $ FailFatal err415
603+ Just (Left e) -> return $ FailFatal err400 { errBody = cs e }
604604 Just (Right v) -> feedTo subserver v
605605
606606-- | Make sure the incoming request starts with @"/path"@, strip it and