summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthiasFischmann <>2020-07-31 18:29:00 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2020-07-31 18:29:00 (GMT)
commit14b40630d4a7e0b8f1d201b33961a11d5b5ea974 (patch)
tree9bfad773da3672c77dd7bc8917b6734595ae3850
parent709a03143ca08256063d5d59dc524c6eefe41817 (diff)
version 0.180.18
-rwxr-xr-xCHANGELOG.md30
-rw-r--r--servant.cabal16
-rw-r--r--src/Servant/API/Header.hs2
-rw-r--r--src/Servant/API/ResponseHeaders.hs2
-rw-r--r--src/Servant/API/Status.hs155
-rw-r--r--src/Servant/Links.hs6
6 files changed, 194 insertions, 17 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6fecc9c..c9d72a7 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,25 @@
[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
+0.18
+----
+
+### Significant changes
+
+- Support for ghc8.8 (#1318, #1326, #1327)
+
+- Configurable error messages for automatic errors thrown by servant,
+ like "no route" or "could not parse json body" (#1312, #1326, #1327)
+
+### Other changes
+
+- Witness that a type-level natural number corresponds to a HTTP
+ status code (#1310)
+
+- Improve haddocs (#1279)
+
+- Dependency management (#1269, #1293, #1286, #1287)
+
+
0.17
----
@@ -41,7 +61,7 @@
Some APIs need query parameters rewriting, e.g. in order to support
for multiple casing (camel, snake, etc) or something to that effect.
- This could be easily achieved by using WAI Middleware and modyfing
+ This could be easily achieved by using WAI Middleware and modifying
request's `Query`. But QueryParam, QueryParams and QueryFlag use
`rawQueryString`. By using `queryString` rather then `rawQueryString`
we can enable such rewritings.
@@ -50,10 +70,10 @@
We used `build-type: Custom`, but it's problematic e.g.
for cross-compiling. The benefit is small, as the doctests
- can be run other ways too (though not so conviniently).
+ can be run other ways too (though not so conveniently).
- *servant* Remove deprecated modules [1268#](https://github.com/haskell-servant/servant/pull/1268)
-
+
- `Servant.Utils.Links` is `Servant.Links`
- `Servant.API.Internal.Test.ComprehensiveAPI` is `Servant.Test.ComprehensiveAPI`
@@ -405,7 +425,7 @@
- *servant-client-core* Add `hoistClient` to `HasClient`.
Just like `hoistServer` allows us to change the monad in which request handlers
- of a web application live in, we also have `hoistClient` for changing the monad
+ of a web application live, we also have `hoistClient` for changing the monad
in which *client functions* live.
Read [tutorial section for more information](https://docs.servant.dev/en/release-0.14/tutorial/Client.html#changing-the-monad-the-client-functions-live-in).
([#936](https://github.com/haskell-servant/servant/pull/936))
@@ -612,7 +632,7 @@
`enter` isn't exported from `Servant` module anymore. You can change
`enter` to `hoistServer` in a straight forward way.
- Unwrap natural transformation and add a api type `Proxy`:
+ Unwrap natural transformation and add an api type `Proxy`:
```diff
-server = enter (NT nt) impl
diff --git a/servant.cabal b/servant.cabal
index 05f9113..f5d821b 100644
--- a/servant.cabal
+++ b/servant.cabal
@@ -1,6 +1,6 @@
cabal-version: >=1.10
name: servant
-version: 0.17
+version: 0.18
synopsis: A family of combinators for defining webservices APIs
category: Servant, Web
@@ -25,7 +25,8 @@ tested-with:
|| ==8.2.2
|| ==8.4.4
|| ==8.6.5
- || ==8.8.2
+ || ==8.8.3
+ || ==8.10.1
, GHCJS == 8.4
extra-source-files:
@@ -55,6 +56,7 @@ library
Servant.API.RemoteHost
Servant.API.ReqBody
Servant.API.ResponseHeaders
+ Servant.API.Status
Servant.API.Stream
Servant.API.Sub
Servant.API.TypeLevel
@@ -79,7 +81,7 @@ library
--
-- note: mtl lower bound is so low because of GHC-7.8
build-depends:
- base >= 4.9 && < 4.14
+ base >= 4.9 && < 4.15
, bytestring >= 0.10.8.1 && < 0.11
, mtl >= 2.2.2 && < 2.3
, transformers >= 0.5.2.0 && < 0.6
@@ -96,7 +98,7 @@ library
-- Here can be exceptions if we really need features from the newer versions.
build-depends:
base-compat >= 0.10.5 && < 0.12
- , aeson >= 1.4.1.0 && < 1.5
+ , aeson >= 1.4.1.0 && < 1.6
, attoparsec >= 0.13.2.2 && < 0.14
, bifunctors >= 5.5.3 && < 5.6
, case-insensitive >= 1.2.0.11 && < 1.3
@@ -105,7 +107,7 @@ library
, http-types >= 0.12.2 && < 0.13
, mmorph >= 1.1.2 && < 1.2
, network-uri >= 2.6.1.0 && < 2.7
- , QuickCheck >= 2.12.6.1 && < 2.14
+ , QuickCheck >= 2.12.6.1 && < 2.15
, string-conversions >= 0.4.0.1 && < 0.5
, tagged >= 0.8.6 && < 0.9
, vault >= 0.3.1.2 && < 0.4
@@ -157,10 +159,10 @@ test-suite spec
, text
, transformers
- -- Additonal dependencies
+ -- Additional dependencies
build-depends:
hspec >= 2.6.0 && < 2.8
- , QuickCheck >= 2.12.6.1 && < 2.14
+ , QuickCheck >= 2.12.6.1 && < 2.15
, quickcheck-instances >= 0.3.19 && < 0.4
build-tool-depends:
diff --git a/src/Servant/API/Header.hs b/src/Servant/API/Header.hs
index 14562df..e5ea1e0 100644
--- a/src/Servant/API/Header.hs
+++ b/src/Servant/API/Header.hs
@@ -23,7 +23,7 @@ import Servant.API.Modifiers
-- >>> type MyApi = "view-my-referer" :> Header "from" Referer :> Get '[JSON] Referer
type Header = Header' '[Optional, Strict]
-data Header' (mods :: [*]) (sym :: Symbol) a
+data Header' (mods :: [*]) (sym :: Symbol) (a :: *)
deriving Typeable
-- $setup
diff --git a/src/Servant/API/ResponseHeaders.hs b/src/Servant/API/ResponseHeaders.hs
index 6ca42b6..b5f98af 100644
--- a/src/Servant/API/ResponseHeaders.hs
+++ b/src/Servant/API/ResponseHeaders.hs
@@ -95,7 +95,7 @@ type family HeaderValMap (f :: * -> *) (xs :: [*]) where
class BuildHeadersTo hs where
buildHeadersTo :: [HTTP.Header] -> HList hs
- -- ^ Note: if there are multiple occurences of a header in the argument,
+ -- ^ Note: if there are multiple occurrences of a header in the argument,
-- the values are interspersed with commas before deserialization (see
-- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 RFC2616 Sec 4.2>)
diff --git a/src/Servant/API/Status.hs b/src/Servant/API/Status.hs
new file mode 100644
index 0000000..ee334fc
--- /dev/null
+++ b/src/Servant/API/Status.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DataKinds #-}
+-- Flexible instances is necessary on GHC 8.4 and earlier
+{-# LANGUAGE FlexibleInstances #-}
+module Servant.API.Status where
+
+import Network.HTTP.Types.Status
+import GHC.TypeLits
+
+-- | Witness that a type-level natural number corresponds to a HTTP status code
+class KnownNat n => KnownStatus n where
+ statusVal :: proxy n -> Status
+
+instance KnownStatus 100 where
+ statusVal _ = status100
+
+instance KnownStatus 101 where
+ statusVal _ = status101
+
+instance KnownStatus 200 where
+ statusVal _ = status200
+
+instance KnownStatus 201 where
+ statusVal _ = status201
+
+instance KnownStatus 202 where
+ statusVal _ = status202
+
+instance KnownStatus 203 where
+ statusVal _ = status203
+
+instance KnownStatus 204 where
+ statusVal _ = status204
+
+instance KnownStatus 205 where
+ statusVal _ = status205
+
+instance KnownStatus 206 where
+ statusVal _ = status206
+
+instance KnownStatus 300 where
+ statusVal _ = status300
+
+instance KnownStatus 301 where
+ statusVal _ = status301
+
+instance KnownStatus 302 where
+ statusVal _ = status302
+
+instance KnownStatus 303 where
+ statusVal _ = status303
+
+instance KnownStatus 304 where
+ statusVal _ = status304
+
+instance KnownStatus 305 where
+ statusVal _ = status305
+
+instance KnownStatus 307 where
+ statusVal _ = status307
+
+instance KnownStatus 308 where
+ statusVal _ = status308
+
+instance KnownStatus 400 where
+ statusVal _ = status400
+
+instance KnownStatus 401 where
+ statusVal _ = status401
+
+instance KnownStatus 402 where
+ statusVal _ = status402
+
+instance KnownStatus 403 where
+ statusVal _ = status403
+
+instance KnownStatus 404 where
+ statusVal _ = status404
+
+instance KnownStatus 405 where
+ statusVal _ = status405
+
+instance KnownStatus 406 where
+ statusVal _ = status406
+
+instance KnownStatus 407 where
+ statusVal _ = status407
+
+instance KnownStatus 408 where
+ statusVal _ = status408
+
+instance KnownStatus 409 where
+ statusVal _ = status409
+
+instance KnownStatus 410 where
+ statusVal _ = status410
+
+instance KnownStatus 411 where
+ statusVal _ = status411
+
+instance KnownStatus 412 where
+ statusVal _ = status412
+
+instance KnownStatus 413 where
+ statusVal _ = status413
+
+instance KnownStatus 414 where
+ statusVal _ = status414
+
+instance KnownStatus 415 where
+ statusVal _ = status415
+
+instance KnownStatus 416 where
+ statusVal _ = status416
+
+instance KnownStatus 417 where
+ statusVal _ = status417
+
+instance KnownStatus 418 where
+ statusVal _ = status418
+
+instance KnownStatus 422 where
+ statusVal _ = status422
+
+instance KnownStatus 426 where
+ statusVal _ = status426
+
+instance KnownStatus 428 where
+ statusVal _ = status428
+
+instance KnownStatus 429 where
+ statusVal _ = status429
+
+instance KnownStatus 431 where
+ statusVal _ = status431
+
+instance KnownStatus 500 where
+ statusVal _ = status500
+
+instance KnownStatus 501 where
+ statusVal _ = status501
+
+instance KnownStatus 502 where
+ statusVal _ = status502
+
+instance KnownStatus 503 where
+ statusVal _ = status503
+
+instance KnownStatus 504 where
+ statusVal _ = status504
+
+instance KnownStatus 505 where
+ statusVal _ = status505
+
+instance KnownStatus 511 where
+ statusVal _ = status511
diff --git a/src/Servant/Links.hs b/src/Servant/Links.hs
index 0d07c20..b42738e 100644
--- a/src/Servant/Links.hs
+++ b/src/Servant/Links.hs
@@ -54,7 +54,7 @@
-- >>> toUrlPiece $ safeLink api without
-- "bye"
--
--- If you would like create a helper for generating links only within that API,
+-- If you would like to create a helper for generating links only within that API,
-- you can partially apply safeLink if you specify a correct type signature
-- like so:
--
@@ -65,7 +65,7 @@
-- >>> apiLink = safeLink api
-- >>> :}
--
--- `safeLink'` allows to make specialise the output:
+-- `safeLink'` allows you to specialise the output:
--
-- >>> safeLink' toUrlPiece api without
-- "bye"
@@ -563,7 +563,7 @@ instance HasLink sub => HasLink (AuthProtect tag :> sub) where
type MkLink (AuthProtect tag :> sub) a = MkLink sub a
toLink = simpleToLink (Proxy :: Proxy sub)
--- | Helper for implemneting 'toLink' for combinators not affecting link
+-- | Helper for implementing 'toLink' for combinators not affecting link
-- structure.
simpleToLink
:: forall sub a combinator.