anthropics / anthropics/buffa

Rpc method "register" causes name conflict

Abierto
#431 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Rust
Estrellas
883
Forks
88
Merge medio
3 d 19 h
PR fusionados (30 d)
42

Descripción

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
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.