1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::stream::Stream;

/// Conversion into a `Stream`.

///

/// By implementing `IntoIterator` for a type, you define how it will be

/// converted to an iterator. This is common for types which describe a

/// collection of some kind.

///

/// [`from_stream`]: #tymethod.from_stream

/// [`Stream`]: trait.Stream.html

/// [`collect`]: trait.Stream.html#method.collect

///

/// See also: [`FromStream`].

///

/// [`FromStream`]: trait.FromStream.html

#[cfg(feature = "unstable")]
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
pub trait IntoStream {
    /// The type of the elements being iterated over.

    type Item;

    /// Which kind of stream are we turning this into?

    type IntoStream: Stream<Item = Self::Item>;

    /// Creates a stream from a value.

    fn into_stream(self) -> Self::IntoStream;
}

impl<I: Stream> IntoStream for I {
    type Item = I::Item;
    type IntoStream = I;

    #[inline]
    fn into_stream(self) -> I {
        self
    }
}