Я пытаюсь создать функцию, которая потребляет Stream
, и обрезать ее при последовательных сбоях max_consecutive_fails
. Однако, вещи не работали хорошо (E0495). Я изменил Stream
s на Iterator
s (и удалил async
s), и это просто сработало. Почему это происходит? Как я могу рефакторинг этого кода (для работы)?
use futures::stream::Stream;
pub fn max_fail<'a, T>(stream : impl Stream<Item = Option<T>> +'a , max_consecutive_fails: usize) -> impl Stream +'a where T : 'a
{
use futures::stream::StreamExt;
let mut consecutive_fails = 0;
stream.take_while(move |x| async {
if x.is_some(){
consecutive_fails = 0;
true
}
else{
consecutive_fails += 1;
consecutive_fails != max_consecutive_fails
}
})
}
Ниже приведен свернутый пример, который я попытался указать, в чем проблема, но все еще не смог понять сообщение об ошибке rust c.
use futures::stream::Stream;
pub fn minified_example<'a>(stream: impl Stream<Item = bool> + 'a) -> impl Stream + 'a
{
use futures::stream::StreamExt;
stream.take_while( |x| async { *x })
}