diff --git a/servant-server/example/greet.hs b/servant-server/example/greet.hs index 8a88dcd5..dca96612 100644 --- a/servant-server/example/greet.hs +++ b/servant-server/example/greet.hs @@ -84,8 +84,9 @@ server = (helloH :<|> postGreetH :<|> deleteGreetH :<|> otherRoutes) :<|> redire RedirectOf (Proxy @("hello" :> Capture "name" Text :> QueryParam "capital" Bool :> Get '[JSON] Greet)) (\buildPath -> buildPath "Nicolas" (Just True)) - -- Fail in any other case - redirect _ = throwError err500 + redirect _ = pure $ + RedirectOf (Proxy @("bye" :> Capture "name" Text :> Get '[JSON] Text)) + (\buildPath -> buildPath "Gaƫl") -- Turn the server into a WAI app. 'serve' is provided by servant, -- more precisely by the Servant.Server module. diff --git a/servant/src/Servant/API/TypeLevel.hs b/servant/src/Servant/API/TypeLevel.hs index 4a5e3c3b..9e4313a2 100644 --- a/servant/src/Servant/API/TypeLevel.hs +++ b/servant/src/Servant/API/TypeLevel.hs @@ -60,6 +60,8 @@ import Servant.API.Capture import Servant.API.Fragment import Servant.API.Header (Header) +import Servant.API.NamedRoutes (NamedRoutes) +import Servant.API.Generic (ToServantApi) import Servant.API.QueryParam (QueryFlag, QueryParam, QueryParams) import Servant.API.ReqBody @@ -127,6 +129,7 @@ type family IsElem' a s :: Constraint -- request represented by @a@ matches the endpoints serving @b@ (for the -- latter, use 'IsIn'). type family IsElem endpoint api :: Constraint where + IsElem endpoint (NamedRoutes rec) = IsElem endpoint (ToServantApi rec) IsElem e (sa :<|> sb) = Or (IsElem e sa) (IsElem e sb) IsElem (e :> sa) (e :> sb) = IsElem sa sb IsElem sa (Header sym x :> sb) = IsElem sa sb