Как использовать метод on_send ответа никеля?

На никелевом веб-сервисе я хотел бы выполнить функцию после завершения отправки ответа. Я нашел метод on_send в этом документе, но я не могу заставить его создать.

Я получаю эту ошибку:

несоответствие типов: тип [closure@src/models/plugins/session.rs:78:22: 78:31 x:_] реализует черту std::ops::FnMut<()>, но черта for<'r> std::ops::FnMut<(&'r mut nickel::Response<'_, D>,)> требуется (ожидаемый кортеж, найдено ())

и этот

несоответствие типов: тип [closure@src/models/plugins/session.rs:78:22: 78:31 x:_] реализует черту std::ops::FnOnce<()>, но черта for<'r> std::ops::FnOnce<(&'r mut nickel::Response<'_, D>,)> требуется (ожидаемый кортеж, найдено ())

Мой пример кода

let mut x: usize = 1;
let update = || x += 2 ;
res.on_send(update);

куда res является &mut Response<'mw, D>

1 ответ

Я не знаком с никелем, но ошибка говорит вам, что ваше закрытие реализует черту

std::ops::FnOnce<()>

но аргумент on_send должно быть

for<'r> std::ops::FnOnce<(&'r mut nickel::Response<'_, D>,)>

Без полного примера кода трудно дать вам рабочий ответ. Но правильный ответ будет примерно таким:

let update = |_| x += 2;

Вы не используете аргумент кортежа, поэтому можете пометить его как неиспользуемый _, Но вы должны указать это, иначе типы не совпадают.

Другие вопросы по тегам