fix!: Set content type if error occurs in Leptos middleware #4216
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
If an error occurs
in Leptos's middleware chain, the content-type header of the returned error response is not set.
Solution
Save the error's content-type from the boxed service in
BoxedService, and pass the content type intoService::run.Note that this requires the following breaking changes:
BoxedService.Service::runtrait method to accept the error's content type as a parameter.However, since this requires breaking changes anyway, this PR achieves
the following in a more extensible way (but still API-breaking):
serfield inBoxedServicewith aServiceRunConfigthat contains thesererror serializer and the error's content type string.BoxedServiceas#[non_exhaustive]so new fields can be added in the future without breaking the API.serparameter ofService::runwith theServiceRunConfigThis allowsService::runto remain the same even if new fields are added to theServiceRunConfigin the future.Note: this is written on top of another PR that's currently open, so there are some changes in this PR that are originally from that PR.
Closes #4209