[][src]Struct blocking::Unblock

pub struct Unblock<T>(_);

Async interface for blocking I/O.

Blocking I/O must be isolated from async code. This type moves blocking operations onto a special thread pool while exposing a familiar async interface.

This type implements traits Stream, AsyncRead, AsyncWrite, or AsyncSeek if the inner type implements Iterator, Read, Write, or Seek, respectively.

If writing data through the AsyncWrite trait, make sure to flush before dropping the Unblock handle or some buffered data might get lost.

Examples

use blocking::Unblock;
use futures::prelude::*;
use std::io::stdout;

let mut stdout = Unblock::new(stdout());
stdout.write_all(b"Hello world!").await?;
stdout.flush().await?;

Implementations

impl<T> Unblock<T>[src]

pub fn new(io: T) -> Unblock<T>[src]

Wraps a blocking I/O handle into an async interface.

Examples

use blocking::Unblock;
use std::io::stdin;

let stdin = Unblock::new(stdin());

pub async fn get_mut<'_, '_>(&'_ mut self) -> &'_ mut T[src]

Gets a mutable reference to the blocking I/O handle.

This is an async method because the I/O handle might be on the thread pool and needs to be moved onto the current thread before we can get a reference to it.

Examples

use blocking::Unblock;
use std::fs::File;

let mut file = Unblock::new(File::create("file.txt")?);
let metadata = file.get_mut().await.metadata()?;

pub async fn with_mut<'_, R, F>(&'_ mut self, op: F) -> R where
    F: FnOnce(&mut T) -> R + Send + 'static,
    R: Send + 'static,
    T: Send + 'static, 
[src]

Performs a blocking operation on the I/O handle.

Examples

use blocking::Unblock;
use std::fs::File;

let mut file = Unblock::new(File::create("file.txt")?);
let metadata = file.with_mut(|f| f.metadata()).await?;

pub async fn into_inner(self) -> T[src]

Extracts the inner blocking I/O handle.

This is an async method because the I/O handle might be on the thread pool and needs to be moved onto the current thread before we can extract it.

Examples

use blocking::Unblock;
use futures::prelude::*;
use std::fs::File;

let mut file = Unblock::new(File::create("file.txt")?);
file.write_all(b"Hello world!").await?;

let file = file.into_inner().await;

Trait Implementations

impl<T: Read + Send + 'static> AsyncRead for Unblock<T>[src]

impl<T: Seek + Send + 'static> AsyncSeek for Unblock<T>[src]

impl<T: Write + Send + 'static> AsyncWrite for Unblock<T>[src]

impl<T: Debug> Debug for Unblock<T>[src]

impl<T: Iterator + Send + 'static> Stream for Unblock<T> where
    T::Item: Send + 'static, 
[src]

type Item = T::Item

Values yielded by the stream.

Auto Trait Implementations

impl<T> !RefUnwindSafe for Unblock<T>

impl<T> Send for Unblock<T> where
    T: Send

impl<T> !Sync for Unblock<T>

impl<T> Unpin for Unblock<T>

impl<T> !UnwindSafe for Unblock<T>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<R> AsyncReadExt for R where
    R: AsyncRead + ?Sized
[src]

impl<S> AsyncSeekExt for S where
    S: AsyncSeek + ?Sized
[src]

impl<W> AsyncWriteExt for W where
    W: AsyncWrite + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> StreamExt for T where
    T: Stream + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

type Ok = T

The type of successful values yielded by this future

type Error = E

The type of failures yielded by this future

impl<S> TryStreamExt for S where
    S: TryStream + ?Sized
[src]