Rpc method "register" causes name conflict
- Lingua principale
- Rust
- Stelle
- 883
- Fork
- 88
- Merge medio
- 3g 19h
- PR unite (30g)
- 42
Descrizione
Hi,
I have an issue - when I define Rpc method "Register" in my proto file, the protoc generator `protoc-gen-connect-rust` generates conflicting register method. Using latest 0.9.2 tooling.
Here is minimal reproducible example:
```proto3
// greet.proto
syntax = "proto3";
package greet.v1;
service GreetService {
rpc Greet(GreetRequest) returns (GreetResponse);
rpc Register(GreetRequest) returns (GreetResponse);
}
message GreetRequest {
string name = 1;
}
message GreetResponse {
string greeting = 1;
}
```
```yaml
# buf.gen.yaml
version: v2
plugins:
- local: protoc-gen-buffa
out: src/generated/buffa
opt: [views=true, json=true]
- local: protoc-gen-buffa-packaging
out: src/generated/buffa
strategy: all
- local: protoc-gen-connect-rust
out: src/generated/connect
opt: [buffa_module=crate::proto]
- local: protoc-gen-buffa-packaging
out: src/generated/connect
strategy: all
opt: [filter=services]
```
```rust
# src/lib.rs
#[path = "generated/connect/mod.rs"]
pub mod connect;
#[path = "generated/buffa/mod.rs"]
pub mod proto;
```
```rust
# src/main.rs
use crate::proto::greet::v1::GreetRequest;
use rust_connect_issue::proto;
fn main() {
let _request = GreetRequest::default();
}
```
It compiles with following error `cargo check`:
```
error[E0061]: this method takes 1 argument but 2 arguments were supplied
--> src/generated/connect/greet.__connect.rs:226:33
|
226 | ... svc.register(ctx, sreq)
| ^^^^^^^^ --- ---- unexpected argument #2 of type `ServiceRequest<'_, GreetRequest>`
| |
| expected `Router`, found `RequestContext`
|
note: method defined here
--> src/generated/connect/greet.__connect.rs:169:8
|
169 | fn register(
| ^^^^^^^^
170 | self: ::std::sync::Arc,
171 | router: ::connectrpc::Router,
| ------
help: remove the extra argument
|
226 - svc.register(ctx, sreq)
226 + svc.register(/* Router */)
|
error[E0277]: `Router` is not a future
--> src/generated/connect/greet.__connect.rs:227:34
|
227 | ... .await?
| ^^^^^ `Router` is not a future
|
= help: the trait `Future` is not implemented for `Router`
= note: Router must be a future or must implement `IntoFuture` to be awaited
= note: required for `Router` to implement `IntoFuture`
help: remove the `.await`
|
227 - .await?
227 + ?
|
error[E0061]: this method takes 1 argument but 2 arguments were supplied
--> src/generated/connect/greet.__connect.rs:350:25
|
350 | svc.register(ctx, req)
| ^^^^^^^^ --- --- unexpected argument #2 of type `ServiceRequest<'_, GreetRequest>`
| |
| expected `Router`, found `RequestContext`
|
note: method defined here
--> src/generated/connect/greet.__connect.rs:169:8
|
169 | fn register(
| ^^^^^^^^
170 | self: ::std::sync::Arc,
171 | router: ::connectrpc::Router,
| ------
help: remove the extra argument
|
350 - svc.register(ctx, req)
350 + svc.register(/* Router */)
|
error[E0277]: `Router` is not a future
--> src/generated/connect/greet.__connect.rs:351:26
|
351 | .await?
| ^^^^^ `Router` is not a future
|
= help: the trait `Future` is not implemented for `Router`
= note: Router must be a future or must implement `IntoFuture` to be awaited
= note: required for `Router` to implement `IntoFuture`
help: remove the `.await`
|
351 - .await?
351 + ?
|
Some errors have detailed explanations: E0061, E0277.
For more information about an error, try `rustc --explain E0061`.
error: could not compile `rust-connect-issue` (lib) due to 4 previous errors
```
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.