Commit graph

591 commits

Author SHA1 Message Date
Andres Loeh
31b12d4bf4 Refactoring: abstracting common parts of method handlers.
This change makes an attempt of abstracting out some of the common
functionality found in the handlers for the different request methods.
There's still a bit of code duplication between the cases for headers
and no headers and empty responses. But it's a significant relative
improvement already.
2015-06-04 13:14:51 +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
e83397a1db Fix the auth combinator example.
This change adapt the auth combinator example to the new router code.
In general, the server interpretation of user-written combinators will
be affected by the new routing code.

The change here also introduces a change in functionality: previously,
wrong authentication triggered a "hard failure", whereas we now trigger
a "soft failure", which is recoverable. For the simple example, this
does not make a lot of difference.

In general, I think having a soft failure is the right option to take
here, although we want a more general story about the relative
priorities of different error codes.
2015-06-04 13:12:21 +02:00
Andres Loeh
404bfdd89c Add test cases for the priority of error codes.
Due to the delayed treatment of checks during the server interpretation,
we now have the ability to produce "better" error codes for certain
APIs. This change introduces test cases for some of these situations and
their new, desired results. These tests would mostly fail with the old
approach to routing.
2015-06-04 13:10:21 +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
0b3291970f Bump to 0.4.1 2015-05-29 16:24:08 +02:00
Alp Mestanogullari
9f1cb63206 fix HTML content types in haddocks 2015-05-29 16:08:14 +02:00
Alp Mestanogullari
db8cf8bd8d Merge pull request #106 from haskell-servant/jkarni/bump-either
Bump 'either' upper-bound
2015-05-29 14:56:45 +01:00
Julian K. Arni
ce012da4ee Bump 'either' upper-bound 2015-05-29 14:37:10 +02:00
Alp Mestanogullari
d785b7ff0f Merge pull request #105 from haskell-servant/jkarni/fix-docs
Fix outdated docs
2015-05-29 10:56:06 +01:00
Julian K. Arni
5de9daf528 Fix outdated docs 2015-05-29 10:59:24 +02:00
Julian Arni
69936280b0 Merge pull request #102 from haskell-servant/jkarni/bound-for-servant-examples
Add servant bounds for servant-examples.
2015-05-28 12:31:26 +02:00
Julian K. Arni
7976468a32 Add servant bounds for servant-examples. 2015-05-28 11:22:43 +02:00
Alp Mestanogullari
c6467e2e70 Merge pull request #100 from haskell-servant/jkarni/servant-changelog
Update servant changelog
2015-05-27 15:32:59 +01:00
Alp Mestanogullari
0c5ae32518 Merge pull request #99 from haskell-servant/jkarni/bump-attoparsec
Bump attoparsec
2015-05-27 15:32:39 +01:00
Julian K. Arni
35e7e386a5 Update servant changelog 2015-05-27 15:33:25 +02:00
Julian K. Arni
28387b7804 Update changelog 2015-05-27 15:29:34 +02:00
Julian K. Arni
2bff26feca Bump attoparsec 2015-05-27 15:19:30 +02:00
Julian Arni
de813c3269 Merge pull request #95 from haskell-servant/tvh/safeLink-92
More strict matching for Capture (safeLink)
2015-05-27 13:27:06 +02:00
Timo von Holtz
0f4c73bffe Make safeLink safer (#92) 2015-05-27 11:29:08 +10:00
Julian Arni
0a6e2aaf61 Merge pull request #96 from haskell-servant/jkarni/missing-test-modules
Add missing servant-client test modules
2015-05-26 12:34:55 +02:00
Julian Arni
cfd0b0d827 Merge pull request #97 from haskell-servant/jkarni/bump-version-script
Add bump-versions script
2015-05-26 12:22:30 +02:00
Julian Arni
3e10ee8a69 Merge pull request #72 from codedmart/deleteFix
Allow zero content types on delete. fixes #69
2015-05-26 12:19:23 +02:00
Julian K. Arni
49289ecbb4 Add bump-versions script 2015-05-26 12:18:26 +02:00
Julian K. Arni
f7b2232818 Add missing servant-client test modules 2015-05-26 12:07:44 +02:00
Alp Mestanogullari
5c25c56d50 Merge pull request #84 from haskell-servant/wip-json-decode-eof
fix a bug in our `eitherDecodeLenient` function
2015-05-23 12:56:31 +01:00
Julian Arni
763928cd66 Merge pull request #82 from triplepointfive/drop-system-filepath
Add support for wai-app-static-3.1.0
2015-05-18 12:55:40 +02:00
Brandon Martin
b45ac07ece HasClient instance for Delete cts' () now does not care at all about content types provided 2015-05-17 07:51:49 -06:00
Alp Mestanogullari
09e525fc76 Merge pull request #85 from haskell-servant/wip-better-error-doctest-failure
servant, servant-server: handle corner case in doctests, add an helpful error message
2015-05-16 09:49:05 +01:00
Alp Mestanogullari
e59c03faa2 Merge pull request #74 from haskell-servant/wip-whitespace-comment
servant: clean up some white spaces, add link explaining why Or works.
2015-05-16 08:28:28 +01:00
Christian Marie
54131821a5 servant: allow whitespace before JSON 2015-05-16 12:58:53 +10:00
Christian Marie
ec55177796 servant, servant-server: handle corner case in doctests
They seem to encounter multiple sandboxes sometimes, we now provide a more
helpful error if that happens. Didn't look into why this happens.
2015-05-16 12:45:08 +10:00
Christian Marie
43d0620403 servant: allow whitespace after parsing JSON
This includes some de-duplication in the test suite.
2015-05-16 11:13:41 +10:00
Ilya Smelkov
7e14eeafe9 Use filepath to add trailing path separator 2015-05-16 01:03:48 +03:00
Julian K. Arni
c41267811e CPP for support for all 3.X versions of wai-app-static 2015-05-16 01:01:55 +03:00
Christian Marie
955261ddd3 Merge pull request #77 from haskell-servant/update-examples
Update examples for servant-docs and servant-client
2015-05-15 20:36:25 +10:00
Christian Marie
13a8813422 Merge pull request #78 from haskell-servant/wip-fix-test-all-script
scripts: install all of the servant ecosystem at once, for consistent dependencies
2015-05-15 15:49:03 +10:00
Christian Marie
28647c0ac1 Merge branch 'wip-fix-test-all-script' into update-examples 2015-05-15 11:04:56 +10:00
Christian Marie
d1b904372d Move comment out of haddocks. 2015-05-15 10:37:18 +10:00
Christian Marie
1e9a5eedb9 Merge branch 'wip-fix-test-all-script' into wip-whitespace-comment 2015-05-15 10:36:16 +10:00
Christian Marie
b5e558f783 Merge pull request #79 from haskell-servant/shahn/wip-fix-test-all-script
fix doctests for cabal-install-1.18
2015-05-14 23:16:10 +10:00
Sönke Hahn
0d47f4527b fix doctests for cabal-install-1.18 2015-05-14 19:47:39 +08:00
Christian Marie
07f8b6a28a scripts: install all of the servant ecosystem at once, for consistent dependencies 2015-05-14 12:35:35 +10:00
Alp Mestanogullari
46d48946b0 update examples for servant-docs. fixes #76 2015-05-14 01:01:41 +02:00
Alp Mestanogullari
ff6c04cf1a update examples in servant-client. fixes #75 2015-05-14 00:52:37 +02:00
Christian Marie
13fcb4f3f1 servant: clean up some white spaces, add link explaining why Or works. 2015-05-14 00:07:57 +10:00
Alp Mestanogullari
c87b846815 Merge pull request #66 from haskell-servant/upper-bound
Upper bounds to base for servant-examples
2015-05-11 10:44:59 +01:00
Alp Mestanogullari
405d69d954 fix some links in the cabal descriptions 2015-05-11 10:43:52 +02:00
Alp Mestanogullari
3745446128 tweak README 2015-05-11 10:36:41 +02:00
Julian K. Arni
15a39b8a7b Upper bounds to base for servant-examples 2015-05-10 14:38:23 +02:00