Commit Graph

41 Commits

Author SHA1 Message Date
Oleg Grenrus 22ec980f6e Update hlint.yaml and fix some hints in servant and servant-server 2018-01-26 17:38:57 +02:00
Oleg Grenrus 15cc4f55dd Update docs related to hoistServer 2017-10-01 20:24:22 +03:00
Oleg Grenrus b6cfd64b5a GHC-8.2 readyness 2017-05-24 08:02:57 +03:00
David Turner a3c5f17749 Generalise type of `emptyServer` so it can be `Enter`ed 2017-05-17 05:17:08 +00:00
David Turner f5d9983381 Rename emptyAPIServer to emptyServer 2017-05-16 15:59:41 +00:00
David Turner 6feb27e7b2 Rename EmptyAPIServer to EmptyServer and add deriving clause 2017-05-16 15:53:19 +00:00
David Turner 94483d586c Add `instance HasServer EmptyAPI` 2017-05-16 10:06:25 +00:00
Alexander Vieth 6389134423 Change to ServerT Raw m = Tagged m Application
For uniformity of Enter.

Previously, `ServerT Raw m ~ Application`. Seems reasonable, but has the
unfortunate consequence of making `Enter` useless for `Raw` routes.
With this change `Tagged m Application` is retagged by `Enter`.
2017-05-15 19:54:43 +03:00
Jack Kelly f52bd11d6b Servant.Server: Re-export missing error codes 2017-05-05 18:39:01 +10:00
Oleg Grenrus e2665391f9 Redo Enter 2017-04-28 14:31:57 +03:00
Oleg Grenrus 5168157757 Make Handler a newtype 2017-01-16 12:18:49 +02:00
Arian van Putten 05379ed7e3 Replace all occurances of () with NoContent
We use NoContent to signify an empty response nowadays. This commit
replaces all occurences of () with NoContent so that all packages use
the new semantics.
2016-07-10 16:58:59 +02:00
Sönke Hahn 5effdfdbbb Rename type variables 'layout' and 'sublayout' to 'api' 2016-07-03 22:46:46 +08:00
Julian Arni ea36656dcd Merge pull request #505 from haskell-servant/jkarni/reexport-application
Re-export Application.
2016-05-12 10:38:46 +02:00
Julian K. Arni 211254512e Re-export Application. 2016-05-11 12:17:36 +02:00
Amar a948639673 Move enter to servant package 2016-04-28 22:13:04 +08:00
Andres Loeh b1a6d88845 Revise the Router type to allow proper sharing.
We've previously used functions in the Router type to provide
information for subrouters. But this accesses the Requests too
early, and breaks sharing of the router structure in general,
causing the Router or large parts of the Router to be recomputed
on every request.

We now do not use functions anymore, and properly compute all
static parts of the router first, and gain access to the request
only in Delayed.

This also turns the code used within Delayed into a proper monad
now called DelayedIO, making some of the code using it a bit
nicer.
2016-04-12 09:38:49 +02:00
Luke Cycon 21546991af Introduce a `Handler` alias for `ExceptT ServantErr IO`
Fixes #434
2016-04-11 22:27:29 -07:00
Andres Loeh 8c778825c7 Improvements and visualization of router structure.
* Improves how Routers are built, in particular via
the `choice` smart constructors. Static lookups are
now used more often.

* We now have test cases making sure that certain
routers have the same structure.

* The router structure can now be visualized for debugging
purposes as a tree. The new functions `layout` and
`layoutWithContext` do this.
2016-04-11 08:08:37 +02:00
aaron levin b3af5a8d95 Move general authentication to Experimental module
Removes the UndecidableInstances extension in the module containing the
HasServer instances.
2016-03-09 22:30:34 +01:00
aaron levin 0461c4642d Add gen. authentication support to servant-server 2016-03-09 22:30:28 +01:00
aaron levin 104ac29bf8 Add BasicAuth support to servant-server 2016-03-08 23:13:02 +01:00
Sönke Hahn 8ef4d4543b renaming: Config -> Context 2016-03-07 23:12:24 +08:00
Julian K. Arni f137972e5d Add 'serveWithConfig'.
And keep the old signature for 'serve'
2016-02-18 16:36:24 +01:00
Sönke Hahn 09b22452aa server/config: added more documentation 2016-01-21 17:58:50 +01:00
Sönke Hahn df09f8616e config: remove HasConfig and make HasServer take `config` as a parameter 2016-01-21 17:58:50 +01:00
Sönke Hahn 67315c4487 server: added Config machinery 2016-01-21 17:55:02 +01:00
Sönke Hahn c6e0ccbc2f server/docs: fix formatting inconsistency 2016-01-14 23:58:48 +01:00
Andres Loeh 1398d1f5e1 More systematic approach to delayed checks.
This introduces a `Delayed` type in `RoutingApplication.hs` that
contains a handler together with delayed checks. There are several
blocks of delayed checks, so that we can ultimately execute them in the
order we desire.

The process is documented in more detail in `RoutingApplication.hs`.
2015-10-26 16:56:25 +01:00
Julian K. Arni ccadba81ec Cleanup errorspec description of routing, changelog.
Review fixes
2015-10-26 16:55:13 +01:00
Julian K. Arni a3b5652ab9 Refactor RouteResult.
Fix rerouting tests
        Fix 405 > 404 issue with Capture.
        Remove ServantErrWithPriority and Monoid instance
        More tests
        Update auth-combinator for routing changes
2015-10-26 16:54:49 +01:00
Matthias Fischmann 8f01efd599 Export tweakResponse from non-internal module; better haddock comment. 2015-10-12 21:58:06 +02:00
Index Int f2f7b061d2 Drop `EitherT` in favor of `ExceptT` 2015-09-12 15:11:24 +03:00
Julian K. Arni 6eb7add53a stylish haskell changes
And import fix.
2015-08-18 00:07:12 +02:00
Andres Loeh eb86a82105 Refactoring: one module per concept.
The main `Server.Internal` module was getting a bit large for my taste.
It now contains just the instances. All the administrative utilities
are in their own dedicated modules.
2015-06-04 13:14:31 +02:00
Andres Loeh f9b1e7fc50 Switch server interpretation to a datatype for efficiency.
Instead of directly interpreting a server as a `RoutingApplication`,
this change introduces the concept of a `Router`, which is a datatype
with several constructors.

In particular, the type of the `route` function changes from

    route :: Proxy layout -> Server layout -> RoutingApplication

to

    route :: Proxy layout -> IO (RouteResult (Server layout)) -> Router

Most important in practice is the case of the `StaticRouter` constructor
in `Router`. For choices between statically known paths, we can now use
a lookup table to dispatch requests rather than trying each request
individually.

This brings down routing complexity of a common case from
O(n) to O(log n).

Another important change is that the handler that is passed down by
`route` is no longer of type `Server layout`, but of type
`IO (RouteResult (Server layout))`. This means that API constructs
can "delay" checks and failure. For example, `ReqBody` does not have
to fetch the request body and feed it to the handler immediately; it
can instead record these actions in the handler that is passed down.
The code will only be executed at a leaf / endpoint of the API.

This is desired behaviour: We prefer to save work by doing all matching
on static path components first. Furthermore, we get better error codes
by doing so.
2015-06-04 13:07:53 +02:00
Julian K. Arni 50b05860b7 Remove Canonicalize 2015-05-03 01:45:17 +02:00
Julian K. Arni bdf6d9aa48 Better docs for servant-server 2015-05-03 01:28:13 +02:00
Julian K. Arni 74f4d2db14 Enter via natural transformations 2015-05-03 00:15:35 +02:00
Julian K. Arni a2b8d6ae58 Better servant-server left 2015-05-02 03:38:53 +01:00
Julian K. Arni ed502f5f21 Prepare merge 2015-04-20 11:13:18 +02:00