github / twirp-rs

Twirp RPC for Rust
MIT License
20 stars 2 forks source link

Allow passing around req/resp http::Extensions #21

Closed tclem closed 3 months ago

tclem commented 3 months ago

Fixes https://github.com/github/twirp-rs/issues/17

Implements a basic way to share data between http middleware (which is dealing with raw http:Request/http::Response) and twirp RPC handlers (which are primarily concerned with implementing the service's business logic).

🙇🏻 to @nickpresta for some excellent collaboration. Thanks Nick! See https://github.com/github/twirp-rs/issues/17 for the full exploration of the various options for supporting this feature.

NOTE: This is a breaking change. To migrate, users of twirp-rs must add a context param to all methods on their api server implementations. For example, this is the patch in a simple service with one rpc:

-    async fn make_hat(&self, req: MakeHatRequest) -> Result<MakeHatResponse, TwirpErrorResponse> {
+    async fn make_hat(&self, ctx: twirp::Context, req: MakeHatRequest) -> Result<MakeHatResponse, TwirpErrorResponse> {
jorendorff commented 3 months ago

I'll review this today.