[−][src]Trait async_std::stream::ExactSizeStream
unstable
only.A stream that knows its exact length.
Many Stream
s don't know how many times they will iterate, but some do.
If a stream knows how many times it can iterate, providing access to
that information can be useful. For example, if you want to iterate
backwards, a good start is to know where the end is.
When implementing an ExactSizeStream
, you must also implement
Stream
. When doing so, the implementation of size_hint
must
return the exact size of the stream.
The len
method has a default implementation, so you usually shouldn't
implement it. However, you may be able to provide a more performant
implementation than the default, so overriding it in this case makes sense.
Examples
Basic usage:
// a finite range knows exactly how many times it will iterate let five = 0..5; assert_eq!(5, five.len());
In the module level docs, we implemented an Stream
,
Counter
. Let's implement ExactSizeStream
for it as well:
impl ExactSizeStream for Counter { // We can easily calculate the remaining number of iterations. fn len(&self) -> usize { 5 - self.count } } // And now we can use it! let counter = Counter::new(); assert_eq!(5, counter.len());
Provided methods
fn len(&self) -> usize
unstable
only.Returns the exact number of times the stream will iterate.
This method has a default implementation, so you usually should not implement it directly. However, if you can provide a more efficient implementation, you can do so. See the trait-level docs for an example.
This function has the same safety guarantees as the size_hint
function.
Examples
Basic usage:
// a finite range knows exactly how many times it will iterate let five = 0..5; assert_eq!(5, five.len());