#Error about needing pin when using futures::select

2 messages · Page 1 of 1 (latest)

modern helm
#

I'm trying to use this trait and got an error about pin. I'm not very familiar with it so i'm reaching for help

#[enum_dispatch]
pub trait StreamerTrait {
    /// return the number of item moved or an error
    async fn process(&mut self, shared_buf: &mut Producer<u8>) -> Result<usize, WriteError>;
}

#[enum_dispatch(StreamerTrait)]
pub enum Streamer {
    TcpStreamer,
    AdbStreamer,
}
let steamer: Option<Streamer> = None;
let shared_buf: Option<Producer<u8>> = None;

loop {

    if let (Some(streamer), Some(shared_buf)) = (&mut steamer, &mut shared_buf) {
        match futures::future::select(rx.recv(), streamer.process(shared_buf)) {
            ..
        }
        
    } else {
        match rx.recv().await {
            ..
        }
        
    }
}