Я пытаюсь реализовать признак BeforeMiddleware
для struct
У меня есть. Я написал следующий код:Для реализации BeforeMiddleware требуется реализация core :: ops :: Fn
impl BeforeMiddleware for Auth {
fn before(&self, _: &mut Request) -> IronResult<()> {
println!("before called");
Ok(())
}
fn catch(&self, _: &mut Request, err: IronError) -> IronResult<()> {
println!("catch called");
Err(err)
}
}
Я получаю следующее сообщение об ошибке:
> cargo build
...
src/handlers/mod.rs:38:11: 38:28 error: the trait `for<'r, 'r, 'r> core::ops::Fn<(&'r mut iron::request::Request<'r, 'r>,)>` is not implemented for the type `auth::Auth` [E0277]
src/handlers/mod.rs:38 chain.link_before(auth);
^~~~~~~~~~~~~~~~~
src/handlers/mod.rs:38:11: 38:28 help: run `rustc --explain E0277` to see a detailed explanation
src/handlers/mod.rs:38:11: 38:28 error: the trait `for<'r, 'r, 'r> core::ops::FnOnce<(&'r mut iron::request::Request<'r, 'r>,)>` is not implemented for the type `auth::Auth` [E0277]
src/handlers/mod.rs:38 chain.link_before(auth);
^~~~~~~~~~~~~~~~~
src/handlers/mod.rs:38:11: 38:28 help: run `rustc --explain E0277` to see a detailed explanation
error: aborting due to 2 previous errors
...
Но the documentation говорит функция link_before
требует только BeforeMiddleware
.
Кто-нибудь знает, почему я вижу эту ошибку и как ее исправить?
EDIT:
Я фактически использовал статический auth
, после того, как делает его нестатическим проблема ушла.
Код, который я поставил в вопросе, не совсем то, что я использовал, единственное отличие заключалось в том, что 'auth' был статическим. Сделав его нестационарным, он просто сработал. Благодарю. – russoue