[Draft] tower_service::Service <-> warp::Filter interop #322
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.
I continued the work started on #70 to try and make
tower_service::Service
's run on warp and the ability to runwarp::Filter
's as a service on Hyper.Notes
tower_service::Service::call(&mut self, req: Request)
I had to remove theArc
usage andClone
to the trait bounds, I benchmarked and results seemed similar benchmarking the hello world example with--release
:(with Arc)
(with Clone)
I looked into Consider removal of
warp::ext::set
#222 and since theWarpService
trait already existed and is also passing theremote_addr
extra argument, so I impledWarpService
for T:tower_service::Service
, when aService
is called via warpremote_addr
(or other future arguments's, see Addwarp::tls::peer_certificates()
filter. #318) is discardedimpl
WarpService
for T:tower_service::Service
requirestower_service::Service::Error : warp::Reject
that seemed to be the simplest way to then integrate Service errors with warp's logging and error handling, should another error be used/shouldReject
be impled for T?I think there still needs to be developed a way to compose
warp::Filter
's withtower_service::Service
's, but maybe that could be done after closing the interop API?