Skip to content

make with generics #16

Closed
Closed
@demosdemon

Description

@demosdemon

Suppose you wanted to write a tower-esque trait using RPITIT:

pub trait LocalService<Request> {
    type Response;
    type Error;

    async fn execute(self, request: Request) -> Result<Self::Response, Self::Error>;
}

This now works, but if I want to use make to add a Send variant, the macro fails:

error: expected `:`
 --> src/example.rs:1:30
  |
1 | #[trait_variant::make(Service<Request>: Send)]
  |                              ^

Omitting the generic parameters yields a different error:

error[E0412]: cannot find type `Request` in this scope
 --> src/example.rs:6:37
  |
6 |     async fn execute(self, request: Request) -> Result<Self::Response, Self::Error>;
  |                                     ^^^^^^^ not found in this scope
  |
help: consider importing one of these items
  |
1 + use core::error::Request;
  |
1 + use std::error::Request;
  |

error[E0107]: missing generics for trait `LocalService`
 --> src/example.rs:2:11
  |
2 | pub trait LocalService<Request> {
  |           ^^^^^^^^^^^^ expected 1 generic argument
  |
note: trait defined here, with 1 generic parameter: `Request`
 --> src/example.rs:2:11
  |
2 | pub trait LocalService<Request> {
  |           ^^^^^^^^^^^^ -------
help: add missing generic argument
  |
2 | pub trait LocalService<Request><Request> {
  |                       +++++++++

error[E0107]: missing generics for trait `Service`
 --> src/example.rs:1:23
  |
1 | #[trait_variant::make(Service: Send)]
  |                       ^^^^^^^ expected 1 generic argument
  |
note: trait defined here, with 1 generic parameter: `Request`
 --> src/example.rs:1:23
  |
1 | #[trait_variant::make(Service: Send)]
  |                       ^^^^^^^
2 | pub trait LocalService<Request> {
  |                        -------
help: add missing generic argument
  |
1 | #[trait_variant::make(Service<Request>: Send)]
  |                              +++++++++

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions