The Service trait required that the call method's future be nameable and not borrow anything from self. This required lots of Arc cloning and manual future implementations.
After this PR
==COMMIT_MSG==
Cleaned up the internal Service trait.
==COMMIT_MSG==
This significantly simplifies the internal service layers. Manual future implementations are now reserved for low level operations that can't be expressed with async/await.
What do the change types mean?
- `feature`: A new feature of the service.
- `improvement`: An incremental improvement in the functionality or operation of the service.
- `fix`: Remedies the incorrect behaviour of a component of the service in a backwards-compatible way.
- `break`: Has the potential to break consumers of this service's API, inclusive of both Palantir services
and external consumers of the service's API (e.g. customer-written software or integrations).
- `deprecation`: Advertises the intention to remove service functionality without any change to the
operation of the service itself.
- `manualTask`: Requires the possibility of manual intervention (running a script, eyeballing configuration,
performing database surgery, ...) at the time of upgrade for it to succeed.
- `migration`: A fully automatic upgrade migration task with no engineer input required.
_Note: only one type should be chosen._
How are new versions calculated?
- ❗The `break` and `manual task` changelog types will result in a major release!
- 🐛 The `fix` changelog type will result in a minor release in most cases, and a patch release version for patch branches. This behaviour is configurable in autorelease.
- ✨ All others will result in a minor version release.
Before this PR
The Service trait required that the
call
method's future be nameable and not borrow anything fromself
. This required lots of Arc cloning and manual future implementations.After this PR
==COMMIT_MSG== Cleaned up the internal
Service
trait. ==COMMIT_MSG==Using the new support added in Rust 1.75 (https://blog.rust-lang.org/2023/12/21/async-fn-rpit-in-traits.html), we can change
Service
's signature to allow thecall
method to be written as a normalasync fn
.This significantly simplifies the internal service layers. Manual future implementations are now reserved for low level operations that can't be expressed with async/await.
Unlike https://github.com/palantir/conjure-rust-runtime/pull/176, this doesn't affect the public API.