io: move io helpers back into tokio-io (#1377)

Utilities are made optional with a feature flag.
This commit is contained in:
Lucio Franco
2019-08-02 12:23:44 -07:00
committed by Carl Lerche
parent 6b202722ea
commit ff41108834
29 changed files with 88 additions and 110 deletions
+37
View File
@@ -0,0 +1,37 @@
use crate::AsyncWrite;
use std::future::Future;
use std::io;
use std::pin::Pin;
use std::task::{Context, Poll};
/// A future to write some of the buffer to an `AsyncWrite`.
#[derive(Debug)]
#[must_use = "futures do nothing unless you `.await` or poll them"]
pub struct Write<'a, W: ?Sized> {
writer: &'a mut W,
buf: &'a [u8],
}
/// Tries to write some bytes from the given `buf` to the writer in an
/// asynchronous manner, returning a future.
pub(crate) fn write<'a, W>(writer: &'a mut W, buf: &'a [u8]) -> Write<'a, W>
where
W: AsyncWrite + Unpin + ?Sized,
{
Write { writer, buf }
}
// forward Unpin
impl<'a, W: Unpin + ?Sized> Unpin for Write<'a, W> {}
impl<W> Future for Write<'_, W>
where
W: AsyncWrite + Unpin + ?Sized,
{
type Output = io::Result<usize>;
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<usize>> {
let me = &mut *self;
Pin::new(&mut *me.writer).poll_write(cx, me.buf)
}
}