Commit Graph

70 Commits

Author SHA1 Message Date
andremarianiello 751350ba9e
WithResource combinator for Servant-managed resources (#1630) 2022-12-29 19:00:47 +01:00
Paolo Capriotti 19ec395e66
Avoid using SOP constructors directly (#1434)
This is a followup to #1420. It uses `respond` and `matchUnion`, with
the help of some type annotations, instead of the NS constructors from
SOP.
2021-07-13 10:10:30 -05:00
Paolo Capriotti 0f9cc7eeec
Add response header support to UVerb (#1420)
* Use type wrapped in Headers h to generate response

This avoids having to define MimeRender instances for Headers.
2021-06-10 17:10:50 +02:00
Andrey Prokopenko da0c83d318
Add URI fragment as a separate combinator (#1324) 2020-11-18 21:57:20 +03:00
fisx c1105899f4
union verbs (#1314) 2020-10-31 20:45:46 +01:00
Ilia Rodionov 40582c40e4 add query rewriting tests and changelog item
add prs: #1249

add ps1249 changelog item
2020-01-09 15:08:24 +02:00
Catherine Galkina b440af900b Implemented NoContentVerb and server instances for it 2019-09-29 14:18:13 +03:00
jschaul a4e5707955
add test 2019-03-18 17:18:24 +01:00
Oleg Grenrus 3001ed7990 Add mods to StreamBody 2018-11-09 21:49:53 +02:00
Oleg Grenrus 7634e08352 Make ComprehensiveAPI part of public API
We cannot simply tweak it, it will break tests of other packages.
Including packages not in this repository.
2018-11-06 13:35:47 +02:00
Oleg Grenrus 45c1cbdfd5 Refactor Stream stuff
- Introduce SourceT, which is simple variant of "correct `ListT`".
  There are another variants possible (like in `streaming`),
  but I'm not sure there's much real difference.

- Introduce `Codensity`. There's a flag if people don't want to depend
  on `kan-extensions`.

- `StreamGenerator` and `ResultStream` are both `SourceT`.
  `Stream` combinator in `servant-client` uses `Codensity` for CPS.

- Add servant-machines, servant-conduit, servant-pipes
- Add streaming cookbook: just code, no explanations.
- Add a script to run streaming 'benchmarks'
2018-11-05 15:48:47 +02:00
Oleg Grenrus cfade67c2f Cleanup pre-GHC-8.0 stuff 2018-07-11 01:39:38 +03:00
Jonathan Lange 972ed49dd4 Run `captureAllSpec`
This was missed due to an oversight.
2018-06-10 17:38:22 +01:00
Oleg Grenrus 1614ca59bf Add test for Stream status setting 2018-06-09 09:37:05 +03:00
Oleg Grenrus c55b778d8e Bump lower bound of http-types >= 0.12
- WIP: pending http-api-data release
- TODO: remove MIN_VERSION_http_types
- There have been 3 major releases of http-types:
  - 0.10 change name of variable
  - 0.11 lowercase escaped URIs
  - 0.12 uppercase escaped URIs
- It's easier for us to support only latest, migration from 0.9/0.10 to 0.12
  is trivial for the downstream. 0.11 may cause semantic (non-type-error) breakage somewhere.

Also allow lens-4.16, remove MIN_VERSION_http_types conditionals, and
update `stack.yaml`
2018-01-30 11:29:25 +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 09485871f5 Adopt http-types-0.10 2017-10-23 08:59:36 +03:00
Catherine Galkina be0878cdd8 Fix tests for different GHC versions 2017-06-19 18:58:25 +03:00
Catherine Galkina 272e47c3d3 Increase stack size for GHC-7.8.4 tests 2017-06-19 14:59:26 +03:00
David Turner f5d9983381 Rename emptyAPIServer to emptyServer 2017-05-16 15:59:41 +00:00
David Turner 937a5c98fd Add test for emptyAPIServer 2017-05-16 10:18:57 +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
Philipp Balzarek 3a0cbdd0f6 throw 400 on query parameter parse failure 2017-01-19 11:09:30 +02:00
Oleg Grenrus 7793b52d23 Change JSON content type to add the charset 2017-01-18 13:40:18 +02:00
Oleg Grenrus 5168157757 Make Handler a newtype 2017-01-16 12:18:49 +02:00
Alex Mason 5bef76ed03 Remove all use of bytestring-conversion 2016-09-02 23:27:37 +10:00
Jonathan Lange c79a254b36 servant-server support for CaptureAll 2016-07-11 14:46:31 +01: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
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 8bf81190b2 add one more auth test
just to clarify on how to use it properly
2016-04-07 19:10:11 +08:00
aaron levin 8a0c3a9497 Add test: Gen Auth properly supports Raw endpoints 2016-04-06 13:45:44 +02:00
Sönke Hahn 6df3429b68 refactored basic auth test cases 2016-04-06 16:44:40 +08:00
Sönke Hahn 14ff219726 fix error status bug in basic auth
Fixes #440.
2016-04-06 11:18:20 +08:00
Sönke Hahn 4224c20bff some formatting and refactoring 2016-04-06 11:18:20 +08:00
Sönke Hahn 09c40f61e2 return 400 (instead of 404) on invalid captures 2016-03-26 20:59:00 +08: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 1e703be15f replace serve with serveWithConfig 2016-03-08 23:13:05 +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 df09f8616e config: remove HasConfig and make HasServer take `config` as a parameter 2016-01-21 17:58:50 +01:00
Sönke Hahn 2176fecfda config: added instances for all interpretations 2016-01-21 17:55:02 +01:00
Sönke Hahn 67315c4487 server: added Config machinery 2016-01-21 17:55:02 +01:00
Sönke Hahn ac930ef198 ComprehensiveAPI: add some comments (and minor tweaks) 2016-01-18 20:06:45 +01:00