Expand description

Enstream provides a way to convert Future to [Stream].

Example

#![feature(generic_associated_types, type_alias_impl_trait)]

use std::future::Future;

use enstream::{HandlerFn, Yielder, enstream};
use futures_util::{future::FutureExt, pin_mut, stream::StreamExt};

struct StreamState<'a> {
    val: &'a str
}

type StreamStateFut<'yielder> = impl Future<Output = ()> + 'yielder;

impl<'a> HandlerFn<'a, &'a str> for StreamState<'a> {
    type Fut<'yielder> = StreamStateFut<'yielder>
    where
        'a: 'yielder;

    fn call<'yielder>(self, mut yielder: Yielder<'yielder, &'a str>) -> Self::Fut<'yielder>
    where
        'a: 'yielder
    {
        async move {
            yielder.yield_item(self.val).await;
        }
    }
}

let owned = String::from("test");

let stream = enstream(StreamState {
    val: &owned
});

pin_mut!(stream);

assert_eq!(stream.next().now_or_never().flatten(), Some("test"));

Structs

[Stream] item yielder.

Traits

Future generator that can be converted to [Stream].

Functions

Create new [Stream] from the provided HandlerFn.