Struct DropStream

Source
pub struct DropStream<S: Stream<Item = T>, T, U: FnOnce()> { /* private fields */ }
Expand description

A stream that wraps another stream with a closure that is called once it is dropped. Very useful for libraries that use streams for data transfer and you need to connect when the opposite site drops the connection, thus dropping the stream.

Example

use futures::Stream;
use drop_stream::DropStream;

let test_stream = futures::stream::repeat(true);
{
    let wrapped_stream = DropStream::new(test_stream, move || {
        println!("Stream has been dropped!");
    });

    let mut wrapped_stream = Box::pin(wrapped_stream);

    let waker = futures::task::noop_waker();
    let mut context = futures::task::Context::from_waker(&waker);
    assert_eq!(
        wrapped_stream.as_mut().poll_next(&mut context),
        std::task::Poll::Ready(Some(true))
    );
}

Implementations§

Source§

impl<S: Stream<Item = T>, T, U: FnOnce()> DropStream<S, T, U>

Source

pub fn new(stream: S, dropper: U) -> Self

Trait Implementations§

Source§

impl<S: Stream<Item = T>, T, U: FnOnce()> Drop for DropStream<S, T, U>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<S: Stream<Item = T>, T, U: FnOnce()> Stream for DropStream<S, T, U>

Source§

type Item = T

Values yielded by the stream.
Source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

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
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
Source§

impl<'pin, S: Stream<Item = T>, T, U: FnOnce()> Unpin for DropStream<S, T, U>
where PinnedFieldsOf<__DropStream<'pin, S, T, U>>: Unpin,

Auto Trait Implementations§

§

impl<S, T, U> Freeze for DropStream<S, T, U>
where S: Freeze, U: Freeze,

§

impl<S, T, U> RefUnwindSafe for DropStream<S, T, U>

§

impl<S, T, U> Send for DropStream<S, T, U>
where S: Send, U: Send,

§

impl<S, T, U> Sync for DropStream<S, T, U>
where S: Sync, U: Sync,

§

impl<S, T, U> UnwindSafe for DropStream<S, T, U>
where S: UnwindSafe, U: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, U> DropStreamExt<U> for T
where U: FnOnce(), T: Stream,

Source§

fn on_drop(self, dropper: U) -> DropStream<T, <T as Stream>::Item, U>

Wraps the stream with a closure that is called once it is dropped. ex: Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

Source§

type Ok = T

The type of successful values yielded by this future
Source§

type Error = E

The type of failures yielded by this future
Source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_>, ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more