Add anthropics/connect-rust plugin v0.3.2#2334
Add anthropics/connect-rust plugin v0.3.2#2334iainmcgin wants to merge 1 commit intobufbuild:mainfrom
Conversation
61b03f3 to
eca199a
Compare
eca199a to
f42cc7a
Compare
f42cc7a to
92259e7
Compare
|
changed to crate ref instead of github ref 👍 |
92259e7 to
314f1da
Compare
connect-rust is a Tower-based Rust implementation of the ConnectRPC protocol. The plugin emits service stubs (server traits, typed clients, monomorphic dispatchers) for the Connect, gRPC, and gRPC-Web protocols from a single service implementation. Passes the full ConnectRPC conformance suite. Generated stubs reference message types via absolute Rust paths into the buffa SDK crate (declared as a plugin dep). The plugin accepts `extern_path=.=<rust_path>` (or shorthand `buffa_module=<rust_path>`) to point at the buffa SDK location, same format as tonic/prost. Crates: https://crates.io/crates/connectrpc-codegen Repo: https://github.com/anthropics/connect-rust
314f1da to
b60cff4
Compare
| # The plugin accepts `extern_path=.=<rust_path>` (or the shorthand | ||
| # `buffa_module=<rust_path>`) to tell it where the buffa-generated message | ||
| # types live. BSR should inject this based on the buffa dep's SDK crate | ||
| # name, same as tonic receives extern_path for its prost dep. Leaving | ||
| # opts empty here; please advise if an explicit entry is needed. | ||
| opts: [] |
There was a problem hiding this comment.
should be fine to leave this empty, and the BSR will figure out extern_path settings using the prost syntax 👍.
| # https://github.com/anthropics/connect-rust/blob/v0.3.2/connectrpc/Cargo.toml | ||
| - name: "connectrpc" | ||
| req: "0.3.2" | ||
| default_features: true |
There was a problem hiding this comment.
silly non-expert-in-rust question: I see the default features; those don't include the tls feature, but is that just something that is "enabled" by having the various "deps" in the sub-features installed? (Mostly trying to confirm that someone consuming this generated SDK could still use the TLS features.)
There was a problem hiding this comment.
[claude code] Yes — Cargo features are additive and unified per-crate across the dependency graph. The generated SDK crate only needs connectrpc's default features for the generated code to compile, so that's all it declares. A consumer who wants TLS adds their own direct dependency in their application's Cargo.toml:
connectrpc = { version = "0.4", features = ["tls"] }Cargo then compiles connectrpc once with the union of features requested by both the SDK crate and the application, so tls (and client-tls / server-tls / any other optional feature) is fully available. Same model the tonic SDK crates use — the SDK doesn't gate runtime features.
Adds the
protoc-gen-connect-rustplugin for ConnectRPC Rust service bindings, under the new top-levelanthropicsorg as requested in earlier review.About connect-rust
connect-rust is a Tower-based Rust implementation of the ConnectRPC protocol:
request.nameis a&strborrow into the decoded bufferCrates on crates.io:
connectrpc,connectrpc-codegen,connectrpc-build.Plugin layering
The plugin emits service stubs only - server traits, typed clients, monomorphic dispatchers. Message types come from
buf.build/anthropics/buffa(declared indeps:). Generated stubs reference message types via absolute Rust paths (crate::<buffa_sdk>::pkg::Type).Dockerfile note: the
protoc-gen-connect-rustbinary is a[[bin]]target inside theconnectrpc-codegencrate, socargo install connectrpc-codegenis what produces it.Open question: extern_path injection
The plugin needs to know where the buffa SDK crate lives to emit the right paths. It accepts either
extern_path=.=<rust_path>(same format as tonic/prost) or the shorthandbuffa_module=<rust_path>.I left
opts: []with a comment in the yaml because I assume BSR injectsextern_path=.=::<buffa_sdk_crate_name>at invocation time based on thedeps:config - same as it does for tonic referencing prost types. Would appreciate confirmation of the exact value BSR injects so I can verify the plugin handles it correctly.Dependencies
Depends on the buffa plugin landing first: #2333
Process note
CONTRIBUTING.md asks for an issue first - happy to open one if you would prefer to discuss before reviewing. Filed as draft.