Как я могу вставить объект, реализующий признак с параметром признака, в Vec?
Я пытаюсь вставить объект, реализующий черту с параметром черты, в Vec
:
trait IRequest {}
trait IRequestHandler<T>
where
T: IRequest,
{
fn handle(&self, request: T);
}
pub struct CreateTodoRequest();
impl IRequest for CreateTodoRequest {}
pub struct CreateTodoRequestHandler();
impl IRequestHandler<CreateTodoRequest> for CreateTodoRequestHandler {
fn handle(&self, request: CreateTodoRequest) {}
}
fn main() {
let request = CreateTodoRequest {};
let handler = CreateTodoRequestHandler();
let mut handlers: Vec<&dyn IRequestHandler<dyn IRequest>> = Vec::new();
handlers.push(&handler);
}
Я получаю сообщение об ошибке:
error[E0277]: the trait bound `CreateTodoRequestHandler: IRequestHandler<dyn IRequest>` is not satisfied
--> src/main.rs:25:19
|
25 | handlers.push(&handler);
| ^^^^^^^^ the trait `IRequestHandler<dyn IRequest>` is not implemented for `CreateTodoRequestHandler`
|
= help: the following implementations were found:
<CreateTodoRequestHandler as IRequestHandler<CreateTodoRequest>>
= note: required for the cast to the object type `dyn IRequestHandler<dyn IRequest>`
Когда у меня было IRequestHandler
без параметра я мог бы использовать его и вставить в Vec
. Проблема возникает только тогда, когда признак имеет параметр.
Можно ли преобразовать объект в трейт с параметром, который он реализует?