Enhance streaming API control for long-running transfers #22
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 PR refactors the streaming API to grant users finer control over HTTP transfers, particularly for long-running cases. Key changes include:
Together, they allow clients to abort transfers early based on metadata (e.g., invalid status code).
Limitations:
on_respond
callback may receive an early response, but if the transfer fails, the final return will be an error (e.g., because of network issues or when aborted by user).Alternatively, revisiting the
response
type could better represent the different point of failures:However, this would break backward compatibility and is still insufficient for async scenarios, which control flow is actually closer to
(response_code * (headers * body io) io) io
, though it’s syntactically cumbersome.While not perfect, this API is strictly more flexible than the current implementation, addressing core pain points for streaming use cases.