Comments (7)
There's a lot to think about here, but one thing that strikes me is: if we do find a good solution to this problem, it should be possible to introduce it without too much disruption, because existing Service
implementations should be trivially transformable to the CPS'ed version. (Could do this via a blanket impl etc). Does that seem right? If so, I think it eliminates any urgency here.
from tower.
@aturon Yep, it'd be easy to wrap the current Service::call
in a res.send(Service::call(req))
. The blanket impl only makes sense in that direction, though, so middleware based around Service
wouldn't be trivially compatible with NewService
.
from tower.
Passing a Sink
to as responder may be a separate topic from borrowing (or maybe its the only kind of borrowing you'd want?), but I'll comment about it specifically: the idea of Service
is to serve RPC, where you have a single response for a request. A Sink
implies being able to to send multiple items back. I suppose an item could implement Sink
and only be allowed to send a single item, but then we've moved that constraint from compile-time to run-time.
from tower.
@seanmonstar For HTTP, think about response bodies, where you might produce the body in a series of chunks -- much like the BufStream
trait in tower-web.
from tower.
@aturon I don't quite see the connection there. Do you mean if it were Sink<ResOrBuf<B>>
with enum ResOrBuf<B> { Res(Response<()>), Buf(B), }
?
from tower.
@seanmonstar Good call-- Sink
isn't exactly what you want-- it's really trait Send<T, E> { async fn send(self, T) -> Result<T, E>; }
or something.
from tower.
I don't believe there currently are any actions to take from this issue, so I'm going to close it. Please let me know if this is an incorrect conclusion.
from tower.
Related Issues (20)
- Adding Service Wrapper that allows to share services for compatibility with Axum route layers HOT 4
- Support weights for request rate limiting HOT 1
- Can I ask one question? HOT 4
- Publish `0.5` release HOT 5
- `Retry<RetryPolicy, RateLimit<Client>>` does not work HOT 7
- Idea: Preventing Inappropriate Service Invocation HOT 1
- Returning a response from a tower layer HOT 2
- AsyncFilterLayer is missing Clone impl
- Have MakeBalance and MakeBalanceLayer example?
- `Reconnect::new()` Generic parameters are redundant HOT 2
- Adding option_layer causes trait bound unsastisfied HOT 1
- Publish release without pin-project (with pin-project-lite) HOT 4
- `tower::service_fn` docs don't say that you need the `util` flag HOT 3
- MQTT client adapter / framework HOT 1
- βFan outβ services? HOT 3
- Consider using `ControlFlow` for retry `Policy`.
- Extending `Building a middleware from scratch` guide
- breaking change in tower design (0.6 or beyond): first class support for async fn traits HOT 20
- unexpected behaviour of `RateLimit`
- experiment with permit based service framework HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tower.