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"));

Implementations§

Create a new WatchStream.

Create a new WatchStream that waits for the value to be changed.

Trait Implementations§

Formats the value using the given formatter. Read more
Converts to this type from the input type.
Values yielded by the stream.
Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
Returns the bounds on the remaining length of the stream. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type of successful values yielded by this future
The type of failures yielded by this future
Poll this TryStream as if it were a Stream. Read more
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more