Я пытаюсь использовать приведенный ниже asyn c fn Conn::event
в asyn c l oop, но получаю следующую ошибку:
error [E0495]: не могу определить подходящее время жизни для autoref из-за противоречивых требований
Исходя из моего ограниченного понимания проблемы, я предполагаю, что он жалуется, потому что ссылка на self связана в типе desugared Future
, который требует 'static
срок службы, в то время как try_for_each
нужно что-то меньшее? Я вне моей лиги здесь!
Как я могу изменить этот код, чтобы ... хм ... работать?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6d5222afe9cc7d9bbe41f7ac0a29d72a
use futures::{Sink, SinkExt, TryFutureExt, TryStreamExt};
use std::marker::Unpin;
use tokio::io::{self, AsyncBufReadExt};
pub struct Conn<S> {
sink: S,
}
impl<S> Conn<S>
where
S: Sink<String>,
S: Unpin,
{
pub async fn event(&mut self, data: String) -> Result<(), ()> {
self.sink.send(data).await.map_err(|_| ())
}
pub async fn run(self) -> Result<(), ()> {
io::BufReader::new(io::stdin())
.lines()
.map_err(|_| ())
.try_for_each(|event| self.event(event))
.await
}
}
fn main() {}