Skip to content

Client call decorator#1211

Closed
mtdowling wants to merge 6 commits into
mainfrom
client-call-decorator
Closed

Client call decorator#1211
mtdowling wants to merge 6 commits into
mainfrom
client-call-decorator

Conversation

@mtdowling

@mtdowling mtdowling commented May 25, 2026

Copy link
Copy Markdown
Member

Closes #1197

In contrast to interceptors, call decorators allow modifying control flow. Decorators can short-circuit calls, do request hedging, caching, be re-entrant, etc. Decorators run after modifyBeforeCall so they see the fully resolved configuration, and modifyBeforeCall can install or replace the decorator per request.


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

timocov and others added 5 commits May 24, 2026 22:14
Fixes #1197

Co-Authored-By: Michael Dowling <michael@mtdowling.com>
…ow access in call decorators"

This reverts commit 72dc964.
CallDecorator can compose in onion order via CallDecorator.chain, and
plugins register them additively with addCallDecorator so multiple
plugins can layer behavior without clobbering each other.

Decorators receive a ClientCallView, a read-only handle to the resolved
call (input, operation, merged context, endpoint resolver, type registry,
auth scheme resolver and schemes, identity resolvers). The view is
implemented by the existing package-private ClientCall, so no extra
allocation per call.

Override merging and modifyBeforeCall now happen up-front in buildCall,
so RequestOverrideConfig stops leaking into the public decorator surface
and decorators see the same effective context as interceptors.
@mtdowling mtdowling mentioned this pull request May 26, 2026
@mtdowling mtdowling closed this May 26, 2026
@mtdowling
mtdowling deleted the client-call-decorator branch June 2, 2026 14:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Overriding Client.call method

4 participants