feat(internal/sidekick/rust): initialize bidi streaming RPCs eagerly - #7221
Conversation
Initialize bidirectional streaming RPCs eagerly on send instead of deferring transport dialing until the first message is written to the channel in a background task. Stream builders now support field setters and with_request to configure the initial request message, and send initiates the stream immediately, surfacing connection errors to the caller.
There was a problem hiding this comment.
Code Review
This pull request refactors the Rust template code for bidirectional streaming RPCs. It renames the builder's build method to send, which now accepts an initial request and returns a Result. The stub, tracing, and transport layers are updated to propagate this request and return a Result. In the transport layer, the connection setup is now awaited directly, allowing stream initiation errors to be returned immediately to the caller. I have no feedback to provide as there are no review comments.
coryan
left a comment
There was a problem hiding this comment.
In Swift we started writing unit tests to verify the mustache template output matches expectations.... For example:
librarian/internal/sidekick/swift/generate_enum_swift_test.go
Lines 90 to 103 in 5a7775a
I think these are less annoying than golden file tests, and will avoid somebody accidentally changing the template to return the wrong thing.
The downside is that they trigger errors if you change spaces or indentation in the mustache templates.
Consider starting a few such tests with this PR.
…tion Add table-driven unit tests for Rust bidirectional streaming code generation, verifying the mustache template output across builder, stub, dynamic stub, tracing, and transport files. For googleapis#6835
Initialize bidirectional streaming RPCs eagerly on send instead of deferring transport dialing until the first message is written to the channel in a background task.
Stream builders now support field setters and with_request to configure the initial request message, and send initiates the stream immediately, surfacing connection errors to the caller.
This change is intended to be the minimal change needed to move the initialization logic and does not address other TODOs remaining in the transport implementation. This includes configuration for the channel values, which may mean we will not use RequestBuilder directly in the final implementation.
For #6835