feat(volo-http): support any body or error for server #434
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.
This commit add more generic types for Service on server side. The body and error can be converted through layers, e.g., you can use the
middleware::from_fn
for convertService<Cx, Request<Incoming>>
toService<Cx, Request<Bytes>>
.Example is also updated.
Motivation
In previous implementation, the
Router
andMethodRouter
only supports fixedBody
(http::Request
withvolo_http::body::Body
), which is inconvenient.Solution
This PR makes
layer
able to convert types of body and error. An example is updated:The outer
Router
usesRequest
withBody
andError = Infallible
, while the inner service usesRequest
withBytes
andError = ()
, and please notice that the middleware converted the types for supporting the operation.Because all the above types have default generic types (body is
hyper::body::Incoming
and error isInfallible
), in this PR, no break changes introduced. But if you want to use this feature, theFromRequest
,Next
(used formiddleware::from_fn
) should be updated with a new generic typeB
as type of the body.