Commit Graph

79 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 bc3f61d615 Add Servant.API.Modifiers to servant
Changes Header, ReqBody and QueryParam to take a modifier list.

Resolves https://github.com/haskell-servant/servant/issues/856

ResponseHeader story turns to be somewhat ugly, but it can be made
elegant when https://github.com/haskell-servant/servant/issues/841 is
implemnted, then we can omit HList aka Header Heterogenous List
implementation.

- servant-server changes:

  Writing server side intepretations is quite simple using
  `unfoldRequestArgument`, which makes Header and QueryParam look quite
  the same.

  `ReqBody` cannot be easily made optional with current design (what that
  would mean: No Content-Type Header?), so that dimensions isn't used
  there.

- Add HasLink for all the rest ComprehensiveAPI combinators
- Add 'tricky' Header', QueryParam' endpoints to ComprehensiveAPI
- servant-docs: Quick'n'dirty implementation. Don't use modifiers information (yet).
2018-01-25 09:10:11 +02:00
Oleg Grenrus 6533d4bee5 Void -> TypeError
This doesn't work on GHC-8.0. I have trouble finding a ticket though.
See
https://ghc.haskell.org/trac/ghc/wiki/Proposal/CustomTypeErrors#DesignquestionsRAE
2018-01-22 18:40:23 +02:00
Oleg Grenrus 43895c83f9 Add two HasServer instances which won't ever exist
Resolves https://github.com/haskell-servant/servant/issues/887
2018-01-20 18:35:57 +02:00
Gershom 85cf8d1c60 Merge branch 'master' into gb-streaming 2017-11-04 00:15:35 -04:00
gbaz da98c94e2f refactor servant.server.internal to consolidate functions (#837)
refactor servant.server.internal to consolidate functions
2017-10-28 20:17:24 +02:00
Gershom 9a2ac6f4dd HasClient instance for Stream 2017-10-20 15:09:11 -04:00
Gershom d4168aa3ae first round of changes 2017-10-19 17:41:49 -04:00
Gershom c5e04514f9 initial checkin 2017-10-18 18:43:43 -04:00
Oleg Grenrus 15cc4f55dd Update docs related to hoistServer 2017-10-01 20:24:22 +03:00
Vaibhav Sagar 1a10972904 Update servant-server/src/Servant/Server/Internal.hs
s/taylor/tailor
2017-09-17 11:40:12 +08:00
Oleg Grenrus 24af338dea Add hoistServer to HasServer 2017-09-14 12:04:34 +03:00
Catherine Galkina ec0431d930 Add instances for new combinators 2017-06-08 18:27:36 +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 f3ac10a1c4 Add missing DeriveDataTypeable 2017-05-16 16:26:47 +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 62560079b1 Add docs for serving an EmptyAPI 2017-05-16 11:09:54 +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
Philipp Balzarek 08786aadbe Check for parse errors in HasServer Header instance 2017-04-06 14:52:55 +02:00
Oleg Grenrus 58e931f48a Resolve todos 2017-01-19 11:26:50 +02:00
Philipp Balzarek 3a0cbdd0f6 throw 400 on query parameter parse failure 2017-01-19 11:09:30 +02:00
Oleg Grenrus 2caabad61a Expose ResourceT, fix the test 2017-01-19 00:57:31 +02:00
Oleg Grenrus bc6ff20f4d Use resourcet for resource managment 2017-01-19 00:57:31 +02:00
Alp Mestanogullari 5d1f03ba1a use an ioref to store clean up actions instead of a field in Delayed, allowing early clean up registration 2017-01-17 22:29:37 +02:00
Alp Mestanogullari 7fb11dae3c make cleanup in Delayed more resistant to exceptions 2017-01-17 22:29:37 +02:00
Alp Mestanogullari 124c6de1eb add a field in Delayed that lets us specify a clean up action that can use the result of bodyD to perform some IO clean up operation 2017-01-17 22:29:36 +02:00
Oleg Grenrus 5168157757 Make Handler a newtype 2017-01-16 12:18:49 +02:00
Julian K. Arni 501212e6b9 Review fixes 2016-09-12 20:40:03 -03:00
Oleg Grenrus f44b336bf1 Support http-api-data-0.3 2016-09-12 18:34:00 -03:00
Jonathan Lange c79a254b36 servant-server support for CaptureAll 2016-07-11 14:46:31 +01:00
Sönke Hahn 5effdfdbbb Rename type variables 'layout' and 'sublayout' to 'api' 2016-07-03 22:46:46 +08:00
Andres Loeh a551eb62e2 Do the accept check before the body check.
This is a reasonably simple attempt at fixing #460.
By moving the accept check to a place before the body check,
we can make it recoverable (the body check is irreversible,
so everything done after the body check has to fail fatally).

The advantage is that we can now specify routes offering
different content types modularly. Failure to match one
is not fatal, and will result in subsequent routes being
tried.

The disadvantage is that we hereby bump the error priority
of the 406 status code. If a request contains a bad accept
header and a bad body, we now get 406 rather than 400. This
deviates from the HTTP decision diagram we try to follow,
but seems like an acceptable compromise for now.
2016-04-15 10:54:22 +02: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
Sönke Hahn b72c271c2c remove ToText from docs 2016-04-02 15:03:00 +08:00
Sönke Hahn 09c40f61e2 return 400 (instead of 404) on invalid captures 2016-03-26 20:59:00 +08:00
Sönke Hahn b4eef7acde refactored HasServer Capture instance 2016-03-26 20:58:59 +08:00
Denis Redozubov a22a981190 update base-compat imports 2016-03-13 12:44:12 +03:00
Denis Redozubov c755f47806 use base-compat in servant-server 2016-03-13 12:42:41 +03: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 546adc391a basic-auth: config -> context 2016-03-08 23:28:27 +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 1aeee3ef94 Remove memoReqBody. 2016-01-26 14:43:15 +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