The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
Moves Host to reference type. Removes Medea dependency.
3 years ago
## Moves `Host` to Reference Type
The `Host` type holds a reference to a `URLSession` instance responsible for all requests. So any representation that it was a value type was half-hearted at best and misleading at worst.
## Removes dependency on `Medea` package
Medea was primarily being used for its `AnyJSON` type’s ability to handle all JSON fragments. But fragments at the top level of responses are unsupported by specs like JSON:API and have never been a good idea. JSON object types are easy to provide without Medea’s help via `JSONSerlialization`. And really, even this minimal amount of JSON parsing is less common now that Codable is a thing and decoding is happening at the call site. Everyone just wants `Data`.
Of the rest of it’s features, the `ValidJSONObject` type is the only that was really being used, and that's trivial to implement internally to SessionArtist.
## Breaking Changes
* `Host` is now a `class` instead of a `struct`.
* `Request.json(_:)` has been removed.
* `Medea` types like `JSONObject`, `JSONArray`, and `ValidJSONObject` are now directly under the `SessionArtist` namespace.
* Actions that threw Medea-originated errors still throw errors. But now they're of the `SessionArtist.Error` type.
* `Package.swift` has been updated to version 5.2. This should mean dependencies only used for testing (like `Perfidy`) will no longer be pulled by consumers.
Swift Package Manager and iOS 13/Catalina Bug Fixes.
4 years ago
## Moves to Swift Package Manager
With built-in Xcode 11 support, SPM is now a much more convenient way to manage dependencies than Carthage. It also lets me ditch all project-related files.
## iOS 13/Catalina Bug
There's a bug in iOS 13/Catalina that doesn't copy the session's `httpAdditionalHeaders` over to a request until the request's task has been `resume`'d. So I manually merge the headers for affected versions.
Massive Breaking Changes
6 years ago
This changes just about everything about everything and there's not much documentation yet. Here's what the new usage looks like:
`myHost.request(myEndpoint).data { /*data result handler*/ }`
`myHost.request(myEndpoint).json { /*json result handler*/ }`
etc.
`myHost.get("/path")` is just a convenience that creates and Endpoint for you behind the scenes.
True `Result` results.
6 years ago
Moves quasi-result "responses" to actual Result results.
This means non-errors are now communicated in the `success` case instead of `response`. It also means we can `flatMap` API responses now.
You can read about the result monad and its usage is here:
https://www.cocoawithlove.com/blog/2016/08/21/result-types-part-one.html
Throwing inits and header field constants.
7 years ago
All failable initializers are now throwing initializers instead. This gives more flexibility all around. If you want the old failable behavior, just prefix calls with `try?`.
When specifying headers, the header field (key) can now either be a string or an enum case for well-known headers. For example:
```
host.get("/foo", headers: ["Content-Type": "text/html"])
//or
host.get("/foo", headers: [.contentType: "text/html"])
```