# [−][src]Trait vujio_server::ExactSizeStream

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

`pub fn len(&self) -> usize`

[src]

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

## Implementations on Foreign Types

`impl<T> ExactSizeStream for Pending<T>`

[src]

`impl<'_, I> ExactSizeStream for &'_ mut I where`

I: ExactSizeStream + Unpin + ?Sized,

[src]

Loading content...I: ExactSizeStream + Unpin + ?Sized,