1[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md)
2[Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
9- Add NoContentVerb [#1028](https://github.com/haskell-servant/servant/issues/1028) [#1219](https://github.com/haskell-servant/servant/pull/1219) [#1228](https://github.com/haskell-servant/servant/pull/1228)
11 The `NoContent` API endpoints should now use `NoContentVerb` combinator.
12 The API type changes are usually of the kind
15 - :<|> PostNoContent '[JSON] NoContent
19 i.e. one doesn't need to specify the content-type anymore. There is no content.
21- `Capture` can be `Lenient` [#1155](https://github.com/haskell-servant/servant/issues/1155) [#1156](https://github.com/haskell-servant/servant/pull/1156)
23 You can specify a lenient capture as
26 :<|> "capture-lenient" :> Capture' '[Lenient] "foo" Int :> GET
29 which will make the capture always succeed. Handlers will be of the
30 type `Either String CapturedType`, where `Left err` represents
31 the possible parse failure.
33- *servant-client* Added a function to create Client.Request in ClientEnv [#1213](https://github.com/haskell-servant/servant/pull/1213) [#1255](https://github.com/haskell-servant/servant/pull/1255)
35 The new member `makeClientRequest` of `ClientEnv` is used to create
36 `http-client` `Request` from `servant-client-core` `Request`.
37 This functionality can be used for example to set
38 dynamic timeouts for each request.
42- *servant-client* *servant-client-core* *servant-http-streams* Fix Verb with headers checking content type differently [#1200](https://github.com/haskell-servant/servant/issues/1200) [#1204](https://github.com/haskell-servant/servant/pull/1204)
44 For `Verb`s with response `Headers`, the implementation didn't check
45 for the content-type of the response. Now it does.
47- *servant-client* *servant-http-streams* `HasClient` instance for `Stream` with `Headers` [#1170](https://github.com/haskell-servant/servant/issues/1170) [#1197](https://github.com/haskell-servant/servant/pull/1197)
48- *servant-client* Redact the authorization header in Show and exceptions [#1238](https://github.com/haskell-servant/servant/pull/1238)
55- Allow `base-compat-0.11`
60- Rename `ServantError` to `ClientError`, `ServantErr` to `ServerError`
61 [#1131](https://github.com/haskell-servant/servant/pull/1131)
63- *servant-client-core* Rearrange modules. No more `Internal` modules, whole
65 [#1130](https://github.com/haskell-servant/servant/pull/1130)
67- *servant-client-core* `RequestBody` is now
70 = RequestBodyLBS LBS.ByteString
71 | RequestBodyBS BS.ByteString
72 | RequestBodySource (SourceIO LBS.ByteString)
75 i.e. no more replicates `http-client`s API.
76 [#1117](https://github.com/haskell-servant/servant/pull/1117)
78- *servant-client-core* Keep structured exceptions in `ConnectionError`
79 constructor of `ClientError`
80 [#1115](https://github.com/haskell-servant/servant/pull/1115)
83 -| ConnectionError Text
84 +| ConnectionError SomeException
87- *servant-client-core* Preserve failing request in `FailureResponse`
88 constructor of `ClientError`
89 [#1114](https://github.com/haskell-servant/servant/pull/1114)
92 -FailureResponse Response
93 +-- | The server returned an error response including the
94 +-- failing request. 'requestPath' includes the 'BaseUrl' and the
95 +-- path of the request.
96 +FailureResponse (RequestF () (BaseUrl, BS.ByteString)) Response
99- *servant-client* Fix (implement) `StreamBody` instance
100 [#1110](https://github.com/haskell-servant/servant/pull/1110)
102- *servant-client* Update CookieJar with intermediate request/responses (redirects)
103 [#1104](https://github.com/haskell-servant/servant/pull/1104)
108- Streaming refactoring.
109 [#991](https://github.com/haskell-servant/servant/pull/991)
110 [#1076](https://github.com/haskell-servant/servant/pull/1076)
111 [#1077](https://github.com/haskell-servant/servant/pull/1077)
113 The streaming functionality (`Servant.API.Stream`) is refactored to use
114 `servant`'s own `SourceIO` type (see `Servant.Types.SourceT` documentation),
115 which replaces both `StreamGenerator` and `ResultStream` types.
117 New conversion type-classes are `ToSourceIO` and `FromSourceIO`
118 (replacing `ToStreamGenerator` and `BuildFromStream`).
119 There are instances for *conduit*, *pipes* and *machines* in new packages:
120 [servant-conduit](https://hackage.haskell.org/package/servant-conduit)
121 [servant-pipes](https://hackage.haskell.org/package/servant-pipes) and
122 [servant-machines](https://hackage.haskell.org/package/servant-machines)
125 Writing new framing strategies is simpler. Check existing strategies for examples.
127 This change shouldn't affect you, if you don't use streaming endpoints.
129- *servant-client* Separate streaming client.
130 [#1066](https://github.com/haskell-servant/servant/pull/1066)
132 We now have two `http-client` based clients,
133 in `Servant.Client` and `Servant.Client.Streaming`.
135 Their API is the same, except for
136 - `Servant.Client` **cannot** request `Stream` endpoints.
137 - `Servant.Client` is *run* by direct
138 `runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)`
139 - `Servant.Client.Streaming` **can** request `Stream` endpoints.
140 - `Servant.Client.Streaming` is *used* by CPSised
141 `withClientM :: ClientM a -> ClientEnv -> (Either ServantError a -> IO b) -> IO b`
143 To access `Stream` endpoints use `Servant.Client.Streaming` with
144 `withClientM`; otherwise you can continue using `Servant.Client` with `runClientM`.
145 You can use both too, `ClientEnv` and `BaseUrl` types are same for both.
147 **Note:** `Servant.Client.Streaming` doesn't *stream* non-`Stream` endpoints.
148 Requesting ordinary `Verb` endpoints (e.g. `Get`) will block until
149 the whole response is received.
151 There is `Servant.Client.Streaming.runClientM` function, but it has
152 restricted type. `NFData a` constraint prevents using it with
153 `SourceT`, `Conduit` etc. response types.
156 runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ServantError a)
159 This change shouldn't affect you, if you don't use streaming endpoints.
161- Drop support for GHC older than 8.0
162 [#1008](https://github.com/haskell-servant/servant/pull/1008)
163 [#1009](https://github.com/haskell-servant/servant/pull/1009)
165- *servant-client-core* Add `NFData (GenResponse a)` and `NFData ServantError` instances.
166 [#1076](https://github.com/haskell-servant/servant/pull/1076)
168 *servant-client-core* Add `aeson` and `Lift BaseUrl` instances
169 [#1037](https://github.com/haskell-servant/servant/pull/1037)
174- `Stream` takes a status code argument
177 -Stream method framing ctype a
178 +Stream method status framing ctype a
181 ([#966](https://github.com/haskell-servant/servant/pull/966)
182 [#972](https://github.com/haskell-servant/servant/pull/972))
184- `ToStreamGenerator` definition changed, so it's possible to write an instance
188 -class ToStreamGenerator f a where
189 - toStreamGenerator :: f a -> StreamGenerator a
190 +class ToStreamGenerator a b | a -> b where
191 + toStreamGenerator :: a -> StreamGenerator b
194 ([#959](https://github.com/haskell-servant/servant/pull/959))
196- Added `NoFraming` streaming strategy
197 ([#959](https://github.com/haskell-servant/servant/pull/959))
199- *servant-client-core* Add `hoistClient` to `HasClient`.
200 Just like `hoistServer` allows us to change the monad in which request handlers
201 of a web application live in, we also have `hoistClient` for changing the monad
202 in which *client functions* live.
203 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).
204 ([#936](https://github.com/haskell-servant/servant/pull/936))
206- *servant-client* Add more constructors to `RequestBody`, including
208 *Note:* we are looking for http-library agnostic API,
209 so the might change again soon.
210 Tell us which constructors are useful for you!
211 ([#913](https://github.com/haskell-servant/servant/pull/913))
216- Support `base-compat-0.10`
221- Streaming endpoint support.
222 ([#836](https://github.com/haskell-servant/servant/pull/836))
223- *servant* Add `Servant.API.Modifiers`
224 ([#873](https://github.com/haskell-servant/servant/pull/873))
225- *servant-client* Support `http-client`’s `CookieJar`
226 ([#897](https://github.com/haskell-servant/servant/pull/897)
227 [#883](https://github.com/haskell-servant/servant/pull/883))
232- Send `Accept` header.
233 ([#858](https://github.com/haskell-servant/servant/issues/858))
238- Factored out into `servant-client-core` all the functionality that was
239 independent of the `http-client` backend.
246- Path components are escaped
247 ([#696](https://github.com/haskell-servant/servant/pull/696))
248- `Req` `reqPath` field changed from `String` to `BS.Builder`
249 ([#696](https://github.com/haskell-servant/servant/pull/696))
250- Include `Req` in failure errors
251 ([#740](https://github.com/haskell-servant/servant/pull/740))
258There shouldn't be breaking changes. Released as a part of `servant` suite.
262* Add MonadBase and MonadBaseControl instances for ClientM
263 ([#663](https://github.com/haskell-servant/servant/issues/663))
265* client asks for any content-type in Accept contentTypes non-empty list
266 ([#615](https://github.com/haskell-servant/servant/pull/615))
268* Add `ClientLike` class that matches client functions generated using `client`
269 with client data structure.
270 ([#640](https://github.com/haskell-servant/servant/pull/640))
272* Allow direct use of 'RequestBody'
273 ([#661](https://github.com/haskell-servant/servant/pull/661))
278* Add MonadThrow and MonadCatch instances for ClientM
283* BACKWARDS INCOMPATIBLE: `client` now returns a ClientM which is a Reader for
284 BasicEnv. BasicEnv comprises the HttpManager and BaseUrl that have had to be
285 passed to each method returned by `client`.
291* `ServantError` has an `Eq` instance now.
296* `client` no longer takes `BaseUrl` and `Manager` arguments. Instead, each function returned by `client` requires these two arguments.
301* Use the `text` package instead of `String`.
302* Support for the `HttpVersion`, `IsSecure`, `RemoteHost` and `Vault` combinators
303* Added support for `path` on `BaseUrl`.
304* `client` now takes an explicit `Manager` argument.
305* Use `http-api-data` instead of `Servant.Common.Text`
306* Client functions now consider any 2xx successful.
307* Remove matrix params.
308* Added support for Basic authentication
309* Add generalized authentication support via the `AuthClientData` type family and
310 `AuthenticateReq` data type
314* The `HasClient` instance for `Delete cts ()` now does not care at all about content types provided.
318* `Delete` now is like `Get`, `Post`, `Put`, and `Patch` and returns a response body
319* Support content-type aware combinators and `Accept`/`Content-type` headers
320* Added a lot of tests
321* Support multiple concurrent threads
322* Use `ServantError` to report Errors instead of `String`
323* Make the clients for `Raw` endpoints return the whole `Response` value (to be able to access response headers for example)
325* Make () instances expect No Content status code, and not try to decode body.
326* Add support for response headers
331* Add matrix parameter support
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list