Использование метода struct с никелевыми маршрутизаторами
У меня есть структура контроллера, которая имеет метод с именем get_endpoint
, Его подпись выглядит так:
pub fn get_endpoint<'mw>(self, req: &mut Request, res: &mut Response<'mw>) -> MiddlewareResult<'mw>
Я хочу использовать этот метод в качестве маршрута в никелевом маршрутизаторе. Я не могу использовать это напрямую, так как это метод. Но я не могу понять, как обернуть его в крышку, которую Никель примет. Мои попытки:
router.get(
"/api/:endpoint",
middleware! { |req, res| return controller.get_endpoint(&mut req, &mut res) });
Это дает мне:
warning: unreachable expression
--> src\main.rs:33:3
|
33 | middleware! { |req, res| return controller.get_endpoint(&mut req, &mut res) });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unreachable_code)] on by default
= note: this error originates in a macro outside of the current crate
error: code relies on type inference rules which are likely to change
--> src\main.rs:33:3
|
33 | middleware! { |req, res| return controller.get_endpoint(&mut req, &mut res) });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[deny(resolve_trait_on_defaulted_unit)] on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #39216 <https://github.com/rust-lang/rust/issues/39216>
= note: this error originates in a macro outside of the current crate
error: aborting due to previous error
Я пытался удалить middleware!
макрос:
router.get(
"/api/:endpoint",
|&mut req, res| controller.get_endpoint(&mut req, &mut res));
И это дает мне другую ошибку:
error[E0271]: type mismatch resolving `for<'r, 'mw, 'conn> <[closure@src\main.rs:33:3: 33:62 controller:_] as std::ops::FnOnce<(&'r mut nickel::Request<'mw, 'conn>, nickel::Response<'mw>)>>::Output ==
std::result::Result<nickel::Action<nickel::Response<'mw>, nickel::Response<'mw, (), controller::hyper::net::Streaming>>, nickel::NickelError<'mw>>`
--> src\main.rs:31:9
|
31 | router.get(
| ^^^ expected bound lifetime parameter 'r, found concrete lifetime
|
= note: required because of the requirements on the impl of `nickel::Middleware<()>` for `[closure@src\main.rs:33:3: 33:62 controller:_]`
error[E0631]: type mismatch in closure arguments
--> src\main.rs:31:9
|
31 | router.get(
| ^^^ expected signature of `for<'r, 'mw, 'conn> fn(&'r mut nickel::Request<'mw, 'conn>, nickel::Response<'mw>) -> _`
32 | "/api/:endpoint",
33 | |&mut req, res| controller.get_endpoint(&mut req, &mut res));
| ----------------------------------------------------------- found signature of `fn(&mut nickel::Request<'_, '_>, nickel::Response<'_>) -> _`
|
= note: required because of the requirements on the impl of `nickel::Middleware<()>` for `[closure@src\main.rs:33:3: 33:62 controller:_]`
error: aborting due to 2 previous errors