Struct tokio_stream::wrappers::WatchStream
source · pub struct WatchStream<T> { /* private fields */ }
Expand description
A wrapper around tokio::sync::watch::Receiver
that implements Stream
.
This stream will start by yielding the current value when the WatchStream is polled,
regardless of whether it was the initial value or sent afterwards,
unless you use WatchStream<T>::from_changes
.
Examples
use tokio_stream::{StreamExt, wrappers::WatchStream};
use tokio::sync::watch;
let (tx, rx) = watch::channel("hello");
let mut rx = WatchStream::new(rx);
assert_eq!(rx.next().await, Some("hello"));
tx.send("goodbye").unwrap();
assert_eq!(rx.next().await, Some("goodbye"));
use tokio_stream::{StreamExt, wrappers::WatchStream};
use tokio::sync::watch;
let (tx, rx) = watch::channel("hello");
let mut rx = WatchStream::new(rx);
// existing rx output with "hello" is ignored here
tx.send("goodbye").unwrap();
assert_eq!(rx.next().await, Some("goodbye"));
Example with WatchStream<T>::from_changes
:
use futures::future::FutureExt;
use tokio::sync::watch;
use tokio_stream::{StreamExt, wrappers::WatchStream};
let (tx, rx) = watch::channel("hello");
let mut rx = WatchStream::from_changes(rx);
// no output from rx is available at this point - let's check this:
assert!(rx.next().now_or_never().is_none());
tx.send("goodbye").unwrap();
assert_eq!(rx.next().await, Some("goodbye"));