servant-router 0.8.0 → 0.8.1
raw patch · 4 files changed
+15/−6 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Servant.Router: instance forall k (sublayout :: k) (path :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, GHC.TypeLits.KnownSymbol path) => Servant.Router.HasRouter (path Servant.API.Sub.:> sublayout)
- Servant.Router: instance forall k (sublayout :: k) (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> sublayout)
- Servant.Router: instance forall k (sublayout :: k) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x) => Servant.Router.HasRouter (Servant.API.Capture.Capture sym x Servant.API.Sub.:> sublayout)
- Servant.Router: instance forall k (sublayout :: k) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryParam sym x Servant.API.Sub.:> sublayout)
- Servant.Router: instance forall k (sublayout :: k) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryParams sym x Servant.API.Sub.:> sublayout)
+ Servant.Router: instance forall k1 (sublayout :: k1) (path :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, GHC.TypeLits.KnownSymbol path) => Servant.Router.HasRouter (path Servant.API.Sub.:> sublayout)
+ Servant.Router: instance forall k1 (sublayout :: k1) (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> sublayout)
+ Servant.Router: instance forall k1 (sublayout :: k1) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x) => Servant.Router.HasRouter (Servant.API.Capture.Capture sym x Servant.API.Sub.:> sublayout)
+ Servant.Router: instance forall k1 (sublayout :: k1) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryParam sym x Servant.API.Sub.:> sublayout)
+ Servant.Router: instance forall k1 (sublayout :: k1) x (sym :: GHC.Types.Symbol). (Servant.Router.HasRouter sublayout, Web.HttpApiData.Internal.FromHttpApiData x, GHC.TypeLits.KnownSymbol sym) => Servant.Router.HasRouter (Servant.API.QueryParam.QueryParams sym x Servant.API.Sub.:> sublayout)
+ Servant.Router: runRouteLoc :: forall layout m a. (HasRouter layout, MonadError RoutingError m) => Location -> Proxy layout -> RouteT layout m a -> m a
Files
- README.md +1/−1
- servant-router.cabal +1/−1
- src/Servant/Router.hs +11/−4
- test/Spec.hs +2/−0
README.md view
@@ -79,7 +79,7 @@ viewsServer :: Server ViewsServer viewsServer = constHandler- (Proxy :: Proxy ViewsServer)+ (Proxy :: Proxy Views) (Proxy :: Proxy Handler) $ docTypeHtml $ do H.head $ return ()
servant-router.cabal view
@@ -1,5 +1,5 @@ name: servant-router-version: 0.8.0+version: 0.8.1 synopsis: Servant router for non-server applications. description: Write Servant APIs to be routed without a server. homepage: https://github.com/ElvishJerricco/servant-router
src/Servant/Router.hs view
@@ -130,16 +130,23 @@ constHandler _ _ = return route _ _ _ = RPage +-- | Use a handler to route a 'Location'.+-- Normally 'runRoute' should be used instead, unless you want custom+-- handling of string failing to parse as 'URI'.+runRouteLoc :: forall layout m a. (HasRouter layout, MonadError RoutingError m)+ => Location -> Proxy layout -> RouteT layout m a -> m a+runRouteLoc loc layout page =+ let routing = route layout (Proxy :: Proxy m) (Proxy :: Proxy a) page+ in routeLoc loc routing+ -- | Use a handler to route a location, represented as a 'String'. -- All handlers must, in the end, return @m a@. -- 'routeLoc' will choose a route and return its result. runRoute :: forall layout m a. (HasRouter layout, MonadError RoutingError m) => String -> Proxy layout -> RouteT layout m a -> m a-runRoute loc' layout page = case uriToLocation <$> parseURI loc' of+runRoute uriString layout page = case uriToLocation <$> parseURIReference uriString of Nothing -> throwError FailFatal- Just uri -> let- routing = route layout (Proxy :: Proxy m) (Proxy :: Proxy a) page- in routeLoc uri routing+ Just loc -> runRouteLoc loc layout page -- | Use a computed 'Router' to route a 'Location'. routeLoc :: MonadError RoutingError m => Location -> Router m a -> m a
test/Spec.hs view
@@ -16,8 +16,10 @@ testUris = [ "https://test.com/root/4?param=hi" , "https://test.com/other/hi/"+ , "/other/relativeMatch" , "https://test.com/fail" , "https://test.com/root/fail"+ , "/root/relativeFail" ] main :: IO ()