introduce the ideas of Before and After middlewares#556
Merged
yoshuawuyts merged 3 commits intohttp-rs:masterfrom May 29, 2020
Merged
introduce the ideas of Before and After middlewares#556yoshuawuyts merged 3 commits intohttp-rs:masterfrom
yoshuawuyts merged 3 commits intohttp-rs:masterfrom
Conversation
1cb9af2 to
a017d32
Compare
a017d32 to
836e58f
Compare
yoshuawuyts
reviewed
May 29, 2020
Member
yoshuawuyts
left a comment
There was a problem hiding this comment.
Overall this LGTM. We should add docs though so folks get a sense of what this is about.
Perhaps we should point out that once async closures / async traits land we no longer need this as people should be able to just write middleware inline using closures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
For discussion, a functional sketch
context
Due to the lack of AsyncFn types in rust currently, we cannot describe the bounds for an async function that has a lifetime in the arguments. As a result, there's no way to write
and instead function middlewares look like:
proposed solution
Because the issue is that Next is not owned, it is possible to write simple async signatures for middlewares that exist on either side of the Next call. This PR called them
BeforeandAftermiddlewares currently, but those names probably can be improved. This PR is predicated on an assumption that a meaningful percentage of app-written middlewares exist as transformations of the request OR the response. This enables the following code.