iced_beacon/
stream.rs

1use futures::Future;
2use futures::channel::mpsc;
3use futures::stream::{self, Stream, StreamExt};
4
5pub fn channel<T, F>(f: impl Fn(mpsc::Sender<T>) -> F) -> impl Stream<Item = T>
6where
7    F: Future<Output = ()>,
8{
9    let (sender, receiver) = mpsc::channel(1);
10
11    stream::select(
12        receiver,
13        stream::once(f(sender)).filter_map(|_| async { None }),
14    )
15}