Use Jason.encode! when sending errors #161
Open
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.
At the moment
Twirp.Plug.send_error/2
usesTwirp.Encoder.encode/3
for encoding the error.This leads to a problem where the
defimpl Jason.Encoder
for theTwirp.Error
struct is not being used, and thus the:__exception__
field is being sent with every error response.The twirp specification v7 describes how error responses must be encoded:
code
andmsg
are required whilemeta
is optional.The twirp-elixir implementation will send the following:
The twirp go implementation is very strict about the errors
This leads the Go implementation to handle the error as if it originated from an intermediary (e.g. a reverse proxy) and translating the HTTP status code 404 as a bad_route instead of the original error.
This PR makes use of
Jason.encode!/1
in theTwirp.Plug.send_error/2
to fix this issue, as it will use the protocol implementation found inTwirp.Error
.